$(document).ready(function(){
var $clickable_pieces = $('.chess_piece').parent();
$($clickable_pieces).addClass('selectee'); // add selectee class
var $selectee = $('.chess_square.selectee');
// wait for click
$($selectee).bind('click',function(){
$('.chess_square.selected').removeClass('selected');
$(this).addClass('selected');
{ ........... }
});
我最初将'selectee'
课程注入所有具有'chess_piece
'类的div,然后我选择具有该类$('.chess_square.selectee')
的DIV。
<div id="clickable">
<div id="div1" class="chess_square">
</div>
<div id="div2" class="chess_square selectee">
<div id="sub1" class="chess_piece queen"></div>
</div>
<div id="div3" class="chess_square">
</div>
</div>
有两种类型的DIV元素,其类名为“chess_square selectee”和“chess_square”,并不意味着可点击。我将'rps_square选择'的Sub DIV从DIV2移动到DIV1,并添加和删除类完全相同的类。意思是Queen Piece从Div2移到Div1。
<div id="div1" class="chess_square selectee">
<div id="sub1" class="chess_piece queen"></div>
</div>
<div id="div2" class="chess_square">
</div>
<div id="div3" class="chess_square">
</div>
然而,问题是jQuery没有更新var $selectee = $('.rps_square.selectee');
。即使我更改了类名,DIV1也不可点击,DIV2仍然可以点击。顺便说一句,我使用了jQuery UI可选,但也没有刷新。
答案 0 :(得分:8)
而不是.bind()
,请使用.live()
,如下所示:
$('.chess_square.selectee').live('click',function(){
$('.chess_square.selected').removeClass('selected');
$(this).addClass('selected');
{ ........... }
});
并不是jQuery没有更新集合,尽管它不是。您已将事件处理程序绑定到匹配的DOM元素。
使用.live()
侦听click
的DOM根目录,如果匹配选择器则执行...如果类改变了,它将不再匹配选择器,处理程序赢了“执行,这就是你所追求的。反之亦然,如果有任何新的东西与选择器匹配,当它为click
气泡时,处理程序将为它执行。