2012-08-08 47 views
2

我的标记类:jQuery的添加事件触发

<ul id="playerControls"> 
    <li class="play-bt"></li> 
</ul> 

而且我有这个事件触发如果播放按钮被按下:

$(".play-bt").bind('click',function(){ 
    $(this).toggleClass('pause-bt'); 
}); 

现在我假设play-bt类名已经改为pause-bt,但如何走到这一步的事件:

$(".pause-bt").bind('click',function(){ 
    console.log('PEW'); 
}); 

是不是被开除了?

回答

5

现在我假设.play-bt类名已被更改为 pause-bt。

toggleClass不能这样工作。

toggleClassaddClassremoveClass的组合。

toggleClass将检查指定的类是否存在。

  • 如果是这样,它将从元素中删除它。
  • 如果没有,则将其添加到元素中。

关于你提到的事件不火的原因,这是因为你必须绑定的是click事件之前分配类pause-bt

bind()在当前点处搜索与选择器相匹配的所有元素,并将该函数分配给事件处理函数。

您需要可以重新绑定这个事件,或使用live()代替bind()

live()

附加的事件处理当前 选择现在和未来的匹配这,所有的元素。

http://api.jquery.com/live/

+0

谢谢。终于让它和live一起工作 – user962206 2012-08-08 14:16:42

+0

不再推荐使用.live()。看到这个页面的解释:http://www.jquery4u.com/jquery-functions/on-vs-live-review/#.UCKRWE3iY3g – Faust 2012-08-08 16:19:42

+0

@Faust谢谢你,很好的阅读!在这种情况下,我会建议OP使用'on()'。看到OP的评论我猜他们需要更新到jQuery 1.7才能运行 – Curt 2012-08-08 16:23:34

3

.bind()只捕获当时存在的元素。由于你的元素最初没有这个类,所以没有绑定。根据您的jQuery版本,您需要.live().on()

+0

我已经改变了我对。它仍然没有工作。我正在使用最新的JQuery – user962206 2012-08-08 14:12:27

0

因为当你拳头设置绑定,你靶向元素没有这个类。使用jQuery。在()函数并绑定到容器是这样的:

$('#playerControls').on('click', '.pause-bt', function(){ 
     console.log('PEW'); 
}); 

本次活动将开火#playerControls,在这一点,它会然后找.paust-BT