Javascript jQuery 1.7+;
我试图对未来的DOM元素使用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
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+