我很难获得一个简单的事件触发器来使用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);
});
现在很好。有时你需要向别人解释一些东西,以了解你做错了什么。
答案 0 :(得分:0)
使用.on()
功能。不推荐使用.live()
$('#equip_new').on('change', function(){
alert(1);
});
答案 1 :(得分:0)
请参阅本指南live()替换为.on()函数
答案 2 :(得分:0)
是的,必须在要监视事件的元素的父元素上完成事件委托,如下所示:
$('#equip_new').parent().on('#equip_new', 'change', function(){
alert(1);
});
答案 3 :(得分:0)
@Sebastian
.on()方法也适用于未来(动态创建的)元素。你必须以你使用deligate的方式使用它。但是.on()语法是1.7版本使用的新语法,它意味着替换.bind(),. delegate()和.live()。
看小提琴:57BTd
如果你像这样使用on(),那么在任何情况下都不会。在小提琴而不是body标签中,您可以为文档提供非动态生成的任何类或ID(任何父元素的类或id)。