【发布时间】:2013-10-23 13:00:17
【问题描述】:
我认为有以下代码:
<% @games.each_with_index do |game, i| %>
<div class="game_<%= i %> game_hide hide" >
<% options = options_from_collection_for_select(Player.where("game_id = ?", game.id), 'id', 'handle' ) %>
<%= f.select(:player_ids, options, {:include_blank => true}, {id: "game_#{i}", :multiple => true} ) %>
</div>
<% end %>
生成以下html:
<div class="add-players">
<div class="game_0 game_hide hide" >
<input name="team[team_divisions_attributes][0][player_ids][]" type="hidden" value="" />
<select id="game_0" multiple="multiple" name="team[team_divisions_attributes][0][player_ids][]"><option value=""></option>
<option value="2551">Näryt</option>
<option value="2552">BrTT</option>
<option value="2553">Danagorn</option>
...
</select>
</div>
<div class="game_1 game_hide hide" >
<input name="team[team_divisions_attributes][0][player_ids][]" type="hidden" value="" />
<select id="game_1" multiple="multiple" name="team[team_divisions_attributes][0][player_ids][]"><option value=""></option>
<option value="4885">Zium</option>
<option value="4886">Abver</option>
<option value="4887">Xenocider</option>
...
</select>
</div>
<div class="game_2 game_hide hide" >
<input name="team[team_divisions_attributes][0][player_ids][]" type="hidden" value="" />
<select id="game_2" multiple="multiple" name="team[team_divisions_attributes][0][player_ids][]"><option value=""></option>
<option value="4865">Odin</option>
<option value="4866">Nazgul</option>
<option value="4867">Dragon</option>
...
</select>
</div>
</div>
并与以下 jQuery 一起放置:
//when box is checked...
$('.show-tabs .show-tab').live('click', function(){
var tab = $('.tabs .tab:nth-of-type(' + ( $(this).index() + 1 ) + ')');
var content = $('.tab-content:nth-of-type(' + ( $(this).index() + 1 ) + ')');
var destroy_field = content.find('input#team_team_divisions_attributes_' + $(this).index() +'__destroy');
if ($(this).find('.checkbox').hasClass('checkBoxed')){
//make it visible
destroy_field.val('0');
//shows the game div for the selected game
$(".game-"+ $(this).index()).show();
//what's the index?
alert($(this).index());
//show the associated tab
tab.show();
tab.click();
} else {
destroy_field.val('1');
tab.hide();
if (tab.hasClass('selected')) {
$('.tabs .tab:visible').first().click();
content.hide();
}
}
} );
一切都在“那里”——我可以在 Chrome 中的开发者工具页面上找到它,但选择框只在第一个游戏中显示 (game_0)——因此,我认为有一些id 有点问题,但我不知道它是什么。
【问题讨论】:
-
问题出在
index()方法上。$(this).index()将始终返回 0。如果您能告诉我您要将此代码添加到的事件是什么,那么我可以在代码级别为您提供帮助。 :) -
我会更新我的帖子,但你说的不是真的 ;)
alert($(this).index());返回0、1或2,具体取决于我选中的框 -
你能不能试试
$('.show-tabs .show-tab').index($(this))。 -
$(".game-"+ $('.show-tabs .show-tab').index($(this))).show();代替$(".game-"+ $(this).index()).show();。请注意$(".game-"中有-。而你的代码中有_(下划线)。 -
啊,对,我在阅读 Sandeep Nayak 的回答后在我的代码中添加了
-,但没有在问题中更改它们,我的错。让我试试看!
标签: jquery css ruby-on-rails ruby-on-rails-3