【发布时间】:2014-07-05 23:31:46
【问题描述】:
我很难让一个简单的事件触发与 jquery 一起工作。我正在使用 jquery 1.9.1 并且不打算降级。我缺少的一件事是.live() 方法,该方法现在内置在.delegate() 函数中。这是我想做的:
我有一些通过 AJAX 加载到我的页面中的 DOM,它看起来如下:
<select id="equip_new">
<option value="1">Text 1</option>
<option value="2">Text 2</option>
</select>
现在我想触发新加载的选定选项的.change() 函数。在旧的 jquery 中我会使用
$('#equip_new').live('change', function(){
alert(1);
});
现在我需要使用 .delegate() 但它不会触发任何东西。我的代码如下所示:
$('#equip_new').delegate('option', 'change', function(){
alert(1);
});
但它不起作用。
在更改通过 AJAX 加载到 DOM 的选择框中的选项时如何正确使用委托来触发代码的任何想法?
编辑:我只是想通了,但想给其他人提示:
您必须在 AJAX 加载内容上方的现有元素上调用 .delegate() 方法。例如 $('body')
我的事件处理程序绑定或委托也是错误的。我做了如下代码:
$('body').delegate('#equip_new', 'change', function(){
alert(1);
});
现在一切都很好。有时您需要向其他人解释一些事情以了解您做错了什么。
【问题讨论】:
-
只需在 ajax 加载后将事件处理程序绑定/重新绑定到元素
-
您应该使用
on()而不是旧的delegate或live。 -
但是如果我正确阅读了文档, .on() 对未来的元素不起作用。如果我错了,请纠正我。