Javascript jQuery 1.7+;

Javascript jQuery 1.7+;,javascript,jquery,live,Javascript,Jquery,Live,我试图对未来的DOM元素使用on方法,但出于某种原因,它不是在单击时调用事件,而是在动态创建DOM对象时激发事件 这是我的密码 $("#checkbox1").on('click', toggleChecked(this.checked)); //this is included in Ajax call success method function toggleChecked(status) { $(".item").each(function () { $(th

我试图对未来的DOM元素使用
on
方法,但出于某种原因,它不是在单击时调用事件,而是在动态创建DOM对象时激发事件

这是我的密码

$("#checkbox1").on('click', toggleChecked(this.checked)); //this is included in Ajax call success method


function toggleChecked(status) {
    $(".item").each(function () {
        $(this).prop("checked", status);
    });
}

我做错了什么?

必须将事件侦听器放在函数文本中。否则,将直接调用该函数

$("#checkbox1").on('click', function() {
    toggleChecked(this.checked);
});
可以更高效地编写函数本身:

function toggleChecked(status) {
    $(".item").prop("checked", status);
}
toggleChecked(this.checked)
将立即执行函数,然后
on
将以未定义的处理程序形式获取其返回值

将其包装为匿名函数,以便在您单击复选框上的
时调用它

$("#checkbox1").on('click', function(){
   toggleChecked(this.checked)
});
如果使用
toggelChecked
方法直接作为
单击
处理程序,则可以在处理程序中使用'this.checked'获得复选框的
选中状态。

两个问题:

  • 通过添加括号,您正在执行函数,您必须将对函数的引用传递给.on()

  • 不能像您希望的那样传递参数。但是事件处理程序中的
    this
    将是单击的domeElement,因此您可以使用
    this.checked在其中获取
    checked
    属性值

下面是修改后的代码:

$("#checkbox1").on('click', toggleChecked);


function toggleChecked() {
    // "this" here is the clicked element
    var status = this.checked;
    $(".item").each(function () {
        // be careful in .each() 'this' is the currently iterated element
        $(this).prop("checked", status);
    });
}

正如人们所指出的,您做的函数是错误的(函数必须是匿名函数或指向函数的指针,或指向函数的字符串)。但是你也使用了错误的“on”方法,它与“live”方法不完全相同。您可以查看文档(或文档的一个区域),其中有一个子选择器

$(document).on('click', "#checkbox1", function() {
    var status = this.checked;
    $(".item").each(function () {
        $(this).prop("checked", status);
});
注意:如果在“checkBoxDiv”中创建了所有复选框,则选择器可以是:

$("#checkBoxDiv").on('click', "#checkbox1", ...
有关如何使用“on”的更多信息,请参阅“live”中函数的比较(约为页面下方的1/3)

从文件中:

根据继承方法重写.live()方法非常困难 直截了当的这些是用于所有应用程序的等效调用的模板 三种事件附件方法:

events参数可以是以空格分隔的事件类型列表 名称和可选名称空间,或事件名称字符串的事件映射 和处理程序。数据参数是可选的,可以省略。对于 例如,以下三个方法调用在功能上是等效的 (但有关更有效、更高效的连接方式,请参见下文。) 委托事件处理程序):


@维克多-只要你能,就把它标记为答案。
$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery
1.4.3+ $(document).on(events, selector, data, handler); // jQuery 1.7+
$("a.offsite").live("click", function(){ alert("Goodbye!"); });                // jQuery 1.3+    
$(document).delegate("a.offsite", "click", function(){ alert("Goodbye!"); });  // jQuery 1.4.3+ 
$(document).on("click", "a.offsite", function(){ alert("Goodbye!"); });        // jQuery 1.7+