JQuery触发器不会对生成的元素起作用

时间:2016-11-23 14:08:27

标签: javascript jquery html

我在'append'标签中的元素很少,如下所示:

...<a href="?my-action=' + data[i].id + '&token=' + data[i].token + '" class="deactivate">'+...

我可以使用以下函数运行ajax:

$('body').on('click', 'a.deactivate', function(e) {
...

它有效,但我想在ajax上取得成功,类似于主要文档元素:

$('#field_id').trigger('click');

我已经绑定$('body.deactivate').trigger('click');$('.deactivate').trigger('click');是否可能?

2 个答案:

答案 0 :(得分:1)

我不知道append标记是什么意思,但我假设您在使用jQuery附加onclicks之后在文档中插入了一些HTML。之后有关键部分。你看到当jQuery附加这样的处理程序时它只会将它附加到当前加载的元素,所以如果你之后加载更多的数据,你将不得不单独附加处理程序。

快速解决方法是删除所有处理程序,例如您想要的处理程序,并在每次加载更多数据时将其重新附加到所有处理程序,但这样做效率低,可能会导致其他问题。

最好以这样的方式创建代码,以便在生成元素时附加处理程序。通过这种方式,您可以更好地控制处理内容的内容,并且在某些元素具有适当处理程序而某些元素没有处理的情况下您无法处理。

答案 1 :(得分:1)

在DOM中创建元素后,您需要触发元素的单击。

例如,这可行:

$('.element').html('<button id="field_id">click</button>')
$('#field_id').trigger('click');

无法触发任何尚未创建的元素的事件。

.on()的工作方式不同,它会创建eventListener,即使以后将元素添加到DOM中也会有效。