jquery:绑定事件处理程序以添加 class
jquery: Binding event handler to added class
我不确定为什么下面的代码不起作用,有人可以帮我看看吗?我设置了一些 JSfiddle 来演示这个问题。
<div class="wrapper">
<div class="state_1">
<a href="#">state one</a>
</div>
</div>
<script>
$('.state_1 a').click(function(){
$(this).parent().removeClass('state_1').addClass('state_2');
$(this).html('state two');
});
/* SECOND CLICK: NEVER TRIGGERS? */
$('.state_2 a').click(function(){
alert("clicked!");
});
</script>
所以,link本身没有class,而是在一个叫做“.state_1”的"container"DIV中。第一次单击 link 时,将从容器中删除 class "state_1",并在其位置添加 "state_2"。
(我们还将锚文本更改为 "state two")。
这一切似乎都有效。
问题是,现在 "container" DIV 应该有 class ".state_2",但是:
$('.state_2 a').click();
...从不触发?
有什么想法吗? JSfiddle:https://jsfiddle.net/m5ctkzg2/
感谢观看!
目前您使用的是 "direct" 绑定,它只会附加到您的代码进行事件绑定调用时页面上存在的元素。
在动态生成元素或操作选择器(如删除和添加类)时,您需要使用Event Delegation using .on()委托事件方法。
一般语法
$(document).on('event','selector',callback_function)
例子
$('.wrapper').on('click', ".state_2 a", function(){
//Your code
});
感谢@Rory Fiddle
我不确定为什么下面的代码不起作用,有人可以帮我看看吗?我设置了一些 JSfiddle 来演示这个问题。
<div class="wrapper">
<div class="state_1">
<a href="#">state one</a>
</div>
</div>
<script>
$('.state_1 a').click(function(){
$(this).parent().removeClass('state_1').addClass('state_2');
$(this).html('state two');
});
/* SECOND CLICK: NEVER TRIGGERS? */
$('.state_2 a').click(function(){
alert("clicked!");
});
</script>
所以,link本身没有class,而是在一个叫做“.state_1”的"container"DIV中。第一次单击 link 时,将从容器中删除 class "state_1",并在其位置添加 "state_2"。 (我们还将锚文本更改为 "state two")。 这一切似乎都有效。
问题是,现在 "container" DIV 应该有 class ".state_2",但是:
$('.state_2 a').click();
...从不触发?
有什么想法吗? JSfiddle:https://jsfiddle.net/m5ctkzg2/
感谢观看!
目前您使用的是 "direct" 绑定,它只会附加到您的代码进行事件绑定调用时页面上存在的元素。
在动态生成元素或操作选择器(如删除和添加类)时,您需要使用Event Delegation using .on()委托事件方法。
一般语法
$(document).on('event','selector',callback_function)
例子
$('.wrapper').on('click', ".state_2 a", function(){
//Your code
});
感谢@Rory Fiddle