我正在查看有关此page的文档。他们有这样的例子......
$("p").on("click", function(){
alert( $(this).text() );
});
$("form").on("submit", false)
$("form").on("submit", function(event) {
event.preventDefault();
});
为什么这样更好或者它与此有何不同......
$("p").click(function(){
alert( $(this).text() );
});
$("form").submit(false);
$("form").submit(function(event) {
event.preventDefault();
});
作为最后一个问题,你为什么要这样做......
$("form").on("submit", function(event) {
event.stopPropagation();
});
而不是......
$("form").submit(function(event) {
event.preventDefault();
});
答案 0 :(得分:7)
Differences Between jQuery .bind() vs .live() vs .delegate() vs .on()
本文最大的收获是......
使用.bind()方法非常昂贵,因为它将相同的事件处理程序附加到选择器中匹配的每个项目。
你应该停止使用.live()方法,因为它已被弃用并且有很多问题。
.delegate()方法在处理性能和对动态添加元素做出反应时给出了很多“砰然作响”。
新的.on()方法主要是语法糖,它可以模仿.bind(),。live()或.delegate(),具体取决于你如何调用它。
新的方向是使用新的.on方法。熟悉语法并开始在所有jQuery 1.7+项目中使用它。
答案 1 :(得分:5)
使用.on
代替.click
e.t.c等特定处理程序时,几乎没有差异。
.on()
方法是提供在一种语法中附加事件处理程序所需的所有功能。您可以使用.on
编写一致的语法,而不是混合使用.on
,.submit
或.click
。.on
支持事件委派,但特定处理程序(例如:.click
)不支持。请阅读here .on
,您可以绑定多个事件处理程序,例如.on('click dblclick')
.on('click.myClick')
之类的命名空间事件。在here .click
触发.on
所以基本上你要避免额外的函数调用。 - .click source code 现在是判决,
$(“form”)。on(“submit”,function(event){ event.preventDefault(); });
为什么这个更好或者它与这个有什么不同
$(“form”)。submit(function(event){ event.preventDefault(); });
$("form").on(
更好,因为上述原因1和5
答案 2 :(得分:3)
click
,submit
等方法只是各自on
和trigger
等效的便捷方法。
如果我相信它们可以提高代码的可读性,我只会使用它们。但总的来说,我发现on
和trigger
方法更清楚地表达了代码的意图。
答案 3 :(得分:2)
$.on()
,即使您没有使用委托也很好,因为它在您的代码中引入了熟悉且一致的语法。 $.bind()
这样的方法时切断中间人。 $.submit()
或$.click()
分配处理程序令人困惑,因为它也用于触发这些事件。然后还有事件委派的额外好处,它可以帮助您在仅需要添加到一个元素时将事件添加到数百个元素。假设您有100个<td>
元素,并且您希望在单击时提醒其内容。你可以这样做:
$("td").click(function(){
alert( $(this).text() );
});
但是现在你已经添加了100个新的事件处理程序。性能真的不好。使用$.on()
,您可以仅绑定<table>
,并检查所有事件以查看引发它们的内容。如果是<td>
,您可以做出相应的回应:
$("table").on("click", "td", function(){
alert( $(this).text() );
});
Voila,只绑定了一个事件,并且只在应用程序中引入了一个事件处理程序。大规模的性能提升。
这是$.on()
任何一天胜过$.click()
或$.submit()
的最重要原因之一。