2

我有一个包含下拉列表的页面,当用户从列表中选择一个选项时,会触发 ajax 调用并创建一系列复选框。有些被检查,有些没有被检查。我需要记录是否对复选框进行了任何更改,即选中/未选中。我尝试使用以下内容,但没有任何反应。

我正在使用 jQuery 版本 1.7.1,顺便说一句。

$("input:checkbox").change(function(){ 
    //some stuff happens
});

我在那里有警报,但什么也没发生。所以我试着把它包起来,$(document).ready(...但又一次,什么都没有。所以我的猜测是,因为当 DOM 准备好时还没有创建复选框,所以它没有标签可以附加该操作。

所以现在我很茫然。我不确定,没有onChange="someFunction()"投入

.append("<input type='checkbox' id='" + theData.DATA + "' value='" + theData.DATA + "'>" + tempName + "<br />");

这实际上是在创建复选框。

有什么想法吗?

4

2 回答 2

7

你是对的,如果你使用的是 jQuery 1.7 .. 使用.on如下语法,

$(<closest_checkbox_container>).on('change', 'input:checkbox', function(){ 
    //some stuff happens
});

如果您使用的是旧版本,请使用.delegate,

$(<closest_checkbox_container>).delegate('input:checkbox', 'change', function(){ 
    //some stuff happens
});

注意:<closest_checkbox_container>DOM 准备好时,最近可用的复选框容器在哪里。

上面的方法被调用delegated events参考(阅读委托事件下的部分)

或者,最好$("input:checkbox").change(function(){在添加完这些复选框后编写。但是,最好假设所有复选框仅添加一次。

于 2012-05-25T14:19:23.037 回答
2

您可以重新绑定来自 ajax 调用的成功响应,也可以使用“on”(http://api.jquery.com/on/)绑定到更改事件。使用“on”将更改事件绑定到任何与选择器匹配的新元素,当它添加到 DOM 时。(如果在 v1.7 下使用委托)

于 2012-05-25T14:18:02.957 回答