jQuery 1.7+中的实时事件
Live events in jQuery 1.7+
我正试图对未来的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);
});
}
我在这里做错了什么?
toggleChecked(this.checked)
将立即执行该函数,然后on
将获得其返回值作为未定义的处理程序。
将其包装为一个匿名函数,以便在选中复选框click
时调用它。
$("#checkbox1").on('click', function(){
toggleChecked(this.checked)
});
如果直接使用toggelChecked
方法作为click
处理程序,则可以在处理程序中使用`this.checked获取复选框的checked
状态。
两个问题:
-
通过添加括号,在执行函数时,必须将对函数的引用传递给.on()
-
您不能像想要的那样传递参数。但是事件处理程序中的
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);
});
}
您必须将事件侦听器放入函数文本中。否则,将直接调用该函数。
$("#checkbox1").on('click', function() {
toggleChecked(this.checked);
});
函数本身可以更有效地编写:
function toggleChecked(status) {
$(".item").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()方法是直截了当的这些模板用于对所有三种事件附加方法:
$(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+
events参数可以是以空格分隔的事件类型列表名称和可选名称空间,或事件名称字符串的事件映射和处理程序。数据参数是可选的,可以省略。对于例如,以下三个方法调用在功能上是等效的(但请参阅以下内容,了解更有效、更高效的连接方式委托的事件处理程序):
$("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+
- 为什么我没有得到对Comet服务器流事件的实时响应
- jQuery:使用实时事件添加tabindex属性
- 谷歌分析点击事件未显示在行为>事件仅在实时中看到>事件
- HTML5服务器发送的事件不是实时的
- 我想要输入文本元素中的实时更改事件
- JQuery 实时提交事件不调用
- 通过实时事件触发点击
- 如何通过点击事件禁用智能街道/实时地址
- 将实时 jQuery 事件应用于 iframe 内容
- 实时触发来自 Rails 的主干事件
- jQuery可在iPad上拖动实时事件
- jQuery 1.7+中的实时事件
- 如何在类上设置实时事件列表器,以自动调整其高度并调整其内容的大小
- 如何从javascript小部件中删除所有jquery实时事件
- 当使用实时事件时,JQuery slideToggle不能在IE8中工作
- ZeroClipboard / zClip——如何绑定实时事件
- jQuery重新绑定或新元素上的实时事件
- 在实时事件中设置jquery筛选器
- 在jQuery中列出所有实时事件
- 有关实时事件的问题