下面的代码有区别吗?
$('#whatever').on('click', function() {
/* your code here */
});
and
$('#whatever').click(function() {
/* your code here */
});
下面的代码有区别吗?
$('#whatever').on('click', function() {
/* your code here */
});
and
$('#whatever').click(function() {
/* your code here */
});
当前回答
下面的代码有区别吗?
不,在你的问题中的两个代码示例之间没有功能上的区别。click(fn)是.on(“click”,fn)的“快捷方法”。来自.on()的文档:
对于一些事件(如.click()),可以使用一些简写方法来附加或触发事件处理程序。有关简写方法的完整列表,请参见事件类别。
请注意,.on()与.click()的不同之处在于,它能够通过传递选择器参数来创建委托事件处理程序,而.click()则不能。当不带选择器参数调用.on()时,它的行为与.click()完全相同。如果需要事件委托,请使用.on()。
其他回答
$('.UPDATE').click(function(){ }); **V/S**
$(document).on('click','.UPDATE',function(){ });
$(document).on('click','.UPDATE',function(){ });
它比$('.UPDATE').click(function(){})更有效; 它可以使用更少的内存,并为动态添加的元素工作。 有时动态获取的数据与编辑和删除按钮不生成JQuery事件时,编辑或删除数据行数据的表单,该时间$(document).on('click','.UPDATE',function(){});是有效的工作,就像相同的获取数据使用jquery。更新或删除时按钮不工作:
.click事件只在元素被渲染时起作用,并且只在DOM准备好时附加到加载的元素上。
.on事件动态地附加到DOM元素,当你想要将事件附加到ajax请求或其他东西(在DOM准备好之后)上呈现的DOM元素时,这是很有用的。
正如其他答案所提到的:
$("#whatever").click(function(){ });
// is just a shortcut for
$("#whatever").on("click", function(){ })
请注意.on()支持一些.click()不支持的其他参数组合,允许它处理事件委托(取代.delegate()和.live())。
(显然还有其他类似的快捷方法,如“keyup”,“focus”等)
我发布一个额外的答案的原因是提到如果你调用无参数的.click()会发生什么:
$("#whatever").click();
// is a shortcut for
$("#whatever").trigger("click");
请注意,如果你直接使用.trigger(),你还可以传递额外的参数或jQuery事件对象,这是你不能用.click()做的。
我还想提一下,如果你查看jQuery源代码(在jQuery -1.7.1.js中),你会看到内部的.click()(或.keyup()等)函数实际上会调用.on()或.trigger()。显然,这意味着您可以确信它们确实有相同的结果,但这也意味着使用.click()有一点点额外的开销—在大多数情况下无需担心或考虑,但理论上在特殊情况下这可能很重要。
编辑:最后,请注意.on()允许你在一行中将多个事件绑定到同一个函数,例如:
$("#whatever").on("click keypress focus", function(){});
从互联网和一些朋友那里了解到,.on()用于动态添加元素。但是当我在一个简单的登录页面中使用它时,点击事件应该发送AJAX到node.js,并返回追加新元素,它开始调用多AJAX调用。当我把它改成click()时,一切都很顺利。其实我以前没有遇到过这个问题。
它们看起来是一样的……click()函数的文档:
这个方法是.bind('click', handler)的快捷方式。
on()函数的文档:
从jQuery 1.7开始,.on()方法提供了所需的所有功能 用于附加事件处理程序。获取从旧jQuery转换的帮助 事件方法,请参见.bind(), .delegate()和.live()。删除事件 与.on()绑定,请参见.off()。