jQuery不会在()更改时触发

时间:2014-04-07 16:59:33

标签: javascript jquery

我有一个ajax调用,它返回一个带有select下拉列表的JSON对象,如下所示:

{
    "responseCode": 200,
    "field_value": "1",
    "field_options": {
        "175": "Incorrect Listing",
        "176": "High Return Rate",
        "177": "Easily Damaged"
    },
    "selectOptions": "<select id=\"do_not_order_options_102450\" class=\"input-medium\"><option value=\"\">Choose Option<\/option><option value=\"175\">Incorrect Listing<\/option><option value=\"176\">High Return Rate<\/option><option value=\"177\">Easily Damaged<\/option><\/select>"
}

在我的页面上,我输出了选择下拉列表。 (我的页面上有很多这些。)

在我的jQuery脚本中,我设置了这个:

 $(function(){
        $('select[id^="do_not_order_options_"]').on("change",function(){
            alert(1);
        });
 });

当我选择一个选项时它没有被解雇......任何人都知道可能是什么问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

您引用的代码将为匹配的选择框连接事件处理程序正确。但是,如果您向页面添加更多内容,则不会挂起他们的change事件。

您可能希望查看事件委派:

$(function() {
    $('some container all these selects share').on('change', 'select[id^="do_not_order_options"]', function() {
        // Handle change
    });
});

jQuery ensures that the change event bubbles,因此我们可以将它挂钩到容器元素上,并使用jQuery的帮助来触发我们的处理程序,仅用于匹配元素(在这种情况下选择)。

由于我们将事件挂钩在容器上,因此在容器中添加更多选择会使它们神奇地工作。