2012-01-27 75 views
2

我想为未来的DOM元素使用on方法,但由于某种原因,而不是在点击时调用事件,它会在DOM对象动态创建时触发它们。在jQuery 1.7+中的直播活动

这是我的代码。

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


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

我在做什么错在这里?

回答

2

toggleChecked(this.checked)会马上执行的功能,然后on会得到它的返回值作为处理这是不确定的。

将其包装为一个匿名函数,以便在复选框上选中click时调用它。

$("#checkbox1").on('click', function(){ 
    toggleChecked(this.checked) 
}); 

如果使用toggelChecked方法directy为click处理程序,你可以使用`的处理程序中this.checked得到复选框的checked状态。

+0

非常感谢,这工作! – Victor 2012-01-27 16:42:10

+0

@ Victor-将它标记为答案,只要你可以。 – ShankarSangoli 2012-01-27 17:02:22

1

您必须将事件侦听器置于函数文字中。否则,直接调用该函数。

$("#checkbox1").on('click', function() { 
    toggleChecked(this.checked); 
}); 

本身可以更有效地写入的功能:

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

两个问题:

  • 通过添加括号,您正在执行的功能,你必须引用传递给函数。对()

  • 你不能像你想传递参数去做。但this在事件处理程序将在点击一个DOMElement,这样你就可以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); 
    }); 
} 
1

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

$(document).on('click', "#checkbox1", function() { 
    var status = this.checked; 
    $(".item").each(function() { 
     $(this).prop("checked", status); 
}); 

注:如果在“checkBoxDiv”你的选择越来越创建了所有的复选框即可:

$("#checkBoxDiv").on('click', "#checkbox1", ... 

有关如何“开”使用更多信息,请参见在函数中的比较'生活'documentation(大约1/3页)。

从文档:

重写。live()方法在其后续方面是 直截了当;这些都为所有 三个事件连接方法等效调用模板:

$(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+