2

我的标记:

<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');
});

是不是被解雇了?

4

3 回答 3

5

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

toggleClass不能那样工作。

toggleClass是 和 的addClass组合removeClass

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

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

关于您的事件未触发的原因,这是因为您必须在分配 class之前pause-bt绑定该 click 事件。

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

您需要重新绑定此事件,或使用live()而不是bind()

live()

为现在和将来匹配当前选择器的所有元素附加一个事件处理程序。

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

于 2012-08-08T14:07:34.070 回答
3

.bind()仅捕获当时存在的元素。由于您的元素最初没有该类,因此它没有被绑定。根据您的 jQuery 版本,您需要.live().on().

于 2012-08-08T14:07:18.563 回答
0

因为当您设置绑定时,您定位的元素没有该类。使用 jQuery .on() 函数并像这样绑定到容器:

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

该事件将在#playerControls 上触发,此时它将查找.paust -bt

于 2012-08-08T14:10:10.710 回答