【问题标题】:Binding JQuery events绑定 JQuery 事件
【发布时间】:2010-11-29 18:58:33
【问题描述】:

JQuery 事件让我很烦。问题是我经常使用 javascript(在ajax请求等之后)绘制新元素 (按钮、div 等)。我有一个元素列表 你可以按下一个编辑按钮,这样你就可以操纵那个 链接到选定的编辑按钮。

现在,如果有人提交一个表单来制作一个新元素,就像那些 以前存在,我用 ajax 提交它,然后我追加或前置 将新元素添加到列表中。之后,新的编辑按钮 新元素没有链接到 JQuery 的事件系统,因为 DOM 没有 在制作编辑按钮后重新加载。如果我叫同样的 包含事件的 javascript 文件,然后编辑按钮有效,但 然后当人们单击其他编辑按钮时,该事件会发生两次 他们因为他们被绑定了两次。我也使用过 .bind() 但这只是 绑定(我认为)同一个事件两次。我不记得在 我如何测试它的那一刻。我没有测试 .one() 但我宁愿 不要使用它,因为某些事件必须被多次调用。

我只是想问一下你们在处理时使用什么方法 事件?

附:我将 JQuery 事件绑定到所有元素都具有的类属性。如果我要根据 ID 将它绑定到每个元素,那么这不会成为问题,因为那时我只需使用 .bind()。通过写这篇文章,我突然想到使用 .unbind() 然后 .bind() 将元素链接到事件系统。你对那个怎么想的?你会用另一种方式来做吗?

提前致谢。 克里斯汀。

【问题讨论】:

    标签: javascript jquery events binding


    【解决方案1】:
    【解决方案2】:

    您希望使用 $.fn.live:

    $('a').live('click', function(e) {
        e.preventDefault();
        alert('im attached even if the DOM has been updated!');
    });
    

    http://docs.jquery.com/Events/live

    【讨论】:

    • live() 不适用于所有内容。如果你想用 live() 绑定一个不受支持的事件,你就不走运了。在这种情况下,我所做的是将 .bind() 调用放入我的 reload() 函数(例如,我在编辑后调用)。这非常有效。
    • preventDefault() 可以很容易地被替换为 return false;顺便说一句:)
    • 我发现 preventDefault 更干净。 return false 也依赖于函数体中的最后一条语句。
    【解决方案3】:

    你的问题有点笼统,但我感觉你要找的是jquery live

    【讨论】:

    • 是的。 jQuery.live() 的行为方式与 .bind() 相同,只是它会在创建元素时在元素上创建新的事件处理程序。
    • 我很确定它只是为文档对象上的事件附加了一个事件处理程序,并解析事件对象以检测哪个元素触发了事件。
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多