触发通过ajax </option>加载的<option>的更改

时间:2013-03-13 09:40:02

标签: jquery ajax select

我很难获得一个简单的事件触发器来使用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);
    });

现在很好。有时你需要向别人解释一些东西,以了解你做错了什么。

4 个答案:

答案 0 :(得分:0)

使用.on()功能。不推荐使用.live()

$('#equip_new').on('change', function(){
        alert(1);
    });

答案 1 :(得分:0)

请参阅本指南live()替换为.on()函数

http://jquery.com/upgrade-guide/1.9/#live-removed

答案 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)。