4

嗨,我有一个 Ajax 调用,我正在使用 jQuery 进行调用,并且想知道这些方法在单击时选择元素有什么区别,

第一的

$(this).on('click', 'button', function (){ });

第二

$('button').on('click', function (){ });

第三

$('button').click(function { });

我的 Ajax 调用从我的数据库中选择新数据,并在成功时更新内容,并从带有 ID 的按钮上的数据对象更改数据,第一个有效,但第二个和第三个都只有效一次,然后它失败了,我想知道为什么,提前非常感谢!

4

4 回答 4

4

根据文档:

.click()

此方法是 .on('click', handler) 的快捷方式

正如您在示例中所示,它们几乎相同,但是您应该使用 on() 方法,因为它允许您进行动态委托。

.on() 方法将事件处理程序附加到 jQuery 对象中当前选定的元素集。从 jQuery 1.7 开始,.on() 方法提供了附加事件处理程序所需的所有功能。

例子 :

$("#dataTable tbody").on("click", "tr", function(event){
  alert($(this).text());
});

该代码将触发在该表中创建的所有元素的警报,此外,如果您发出 AJAX 请求并将它们附加到同一个表中,它们的事件处理程序将动态附加。

要了解有关on()代表如何检查的更多信息。

于 2013-06-15T21:57:13.030 回答
0

从文档:

$('button').click(function { });

此方法是 .on('click', handler) 的快捷方式

所以它是一样的:

$('button').on('click', function { });

$(this)和之间的区别$('button')是一个范围。在第一种情况下,您有一个用于关闭元素的处理程序。其次,您使用选择器,这意味着您为button文档上的所有内容附加点击事件。

于 2013-06-15T22:00:26.523 回答
0

您可以使用 .on() 将事件绑定到尚不存在的元素。例如,当您将 ajax 响应放入 div 时,您可以提前定义事件,将其绑定到 div,但将触发器设置为其他元素。

例如:

$('div').on('click','button',function(){});
于 2013-06-15T22:01:33.903 回答
0

第一个起作用而不是其他两个起作用的原因可能是因为当您在 ajax 调用之后覆盖按钮时,您正在覆盖事件;这违背了将委托与 on() 一起使用的全部意义。使用第一个或在 ajax 调用完成后重新创建事件处理程序。

于 2013-06-15T22:06:01.173 回答