javascript - 什么是 javascript 事件委托(delegate)以及如何让我的 js 保持干燥?

标签 javascript jquery dry

我的案例

$(".myElementWithSpecialActionHandler").click(function(){});

元素被重新定位后,比如插入到页面的不同位置,

var content_from_table = from_table_obj.html(); 
var content_target_table = to_table_obj.html();

在 ajax 调用之前。我把

from_table_obj.html(content_target_table); 
to_table_obj.html(content_from_table);" in the ajax response handler.

之后事件处理函数停止工作。所以我必须做

// after DOM manipulation
// again >.<
$(".myElementWithSpecialActionHandler").click(function(){});

event delegation只有这样才能解决?还是有更好的方法从一开始就避免这种情况?

编辑:添加“重新定位”代码

最佳答案

你正在做的是删除元素并重新创建它(不知道为什么)。因此它不再是同一个元素,您的事件处理程序将无法工作。

在这种情况下,是的,您应该使用事件委托(delegate):

$(document).on('click', ".myElementWithSpecialActionHandler", function(){});

编辑:

您可以使用 .appendTo() 将它添加到另一个地方(可能是隐藏的 div 或其他东西)。或者你可以将它 appendTo() 到它的目的地但隐藏它直到你触发 ajax 回调。我创建了一个小 jsfiddle 来向您展示 appendTo() 不会删除事件处理程序:jsfiddle

var divId = '#div2';
$('button').on('click', function() {
   $(this).appendTo(divId);
    divId = divId == '#div2' ? '#div1' : '#div2';
});

希望对你有帮助。

关于javascript - 什么是 javascript 事件委托(delegate)以及如何让我的 js 保持干燥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22115340/

相关文章:

python - 类 __init__ 属性,DRY 与 IDE 功能

Python 2.7 访问父类(super class)属性不是 DRY?

javascript - 如何在 NodeJS 中拆分和修改字符串?

Javascript 停止图片加载

javascript - 动态更改厚框弹出窗口大小

java - 尊重包含类名的变量的 DRY 原则

javascript - LinkedIn JS API - 无法通过 JS 获取教育对象

javascript - ExtJS5 - 图表极坐标 itemclick

javascript - FadeIn 没有给出正确的时间

javascript - SetInterval/ClearInterval 循环无法正常运行