我有一个用户网格,我可以为该网格添加新用户。
因为这就是我正在做的事情,当我拿起删除行事件时,我必须使用jquery委托将事件附加到上下文而不是页面。
今天我们应该用delegate
替换on
。
在下面的两个函数中,只有委托版本捕获了删除按钮的单击事件。这是为什么?
//不起作用
$(".removeRow").on("click", function () {
var $this = $(this);
var $row = $this.closest("tr");
var username = $row.data("msurvey-username");
var url = GetHiddenField("msurvey-remove-employee");
dataService.removeEmployee(username, $row, removeEmployeeFromGrid, url);
});
//不起作用
$("body").on(".removeRow", "click", function () {
var $this = $(this);
var $row = $this.closest("tr");
var username = $row.data("msurvey-username");
var url = GetHiddenField("msurvey-remove-employee");
dataService.removeEmployee(username, $row, removeEmployeeFromGrid, url);
});
//这确实有效
$("body").delegate(".removeRow", "click", function () {
var $this = $(this);
var $row = $this.closest("tr");
var username = $row.data("msurvey-username");
var url = GetHiddenField("msurvey-remove-employee");
dataService.removeEmployee(username, $row, removeEmployeeFromGrid, url);
});
答案 0 :(得分:5)
对于.on()
event-delegation使用此代码:
$(document).on("click", '.removeRow',function () {
//Your code ...
});
注意:
body
进行绑定,因为可能会出现错误document
答案 1 :(得分:5)
使用Event Delegation委托事件方法.on()的正确语法是。
即
$(document).on('event','selector',callback_function)
因此,将事件绑定调用更改为
$(document).on("click", ".removeRow", function () {
//Your code
});
为了获得更好的性能,您应该使用最接近的静态容器而不是document
。
答案 2 :(得分:3)
您可以使用:
$(parentSelector).on('click', 'elementSelector', function() {
// Handler Code here
});
parentSelector
是elementSelector
的常见和静态父项。与作为parentSelector的document
相比,这将更快。