2009-09-19 127 views
1

JQuery事件令我烦恼。事情是,我经常使用JavaScript(在ajax请求之后)使用 来绘制新元素 (按钮,div等)。我有一个元素列表 ,您可以按下编辑按钮,这样您就可以操纵链接到所选编辑按钮的 。绑定JQuery事件

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

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

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

在此先感谢。 Kristinn。

回答

4

你打算使用$ .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

+0

非常感谢。 – 2009-09-19 22:06:55

+0

live()不适用于一切。如果你想用live()绑定一个不支持的事件,那么你运气不好。我在这种情况下做的是将一个.bind()调用放入我的reload()函数中(我称之为编辑后调用)。这工作得很好。 – Vince 2009-09-19 22:15:07

+0

preventDefault()很容易被返回false所取代; 顺便说一句:) – 2009-09-19 23:17:50

2

你的问题是有点一般,但我有一种感觉,你要找的是什么jquery live

+0

是。 jQuery.live()的作用与.bind()相同,只不过它会在创建元素时创建新的事件处理程序。 – 2009-09-19 21:59:37

+0

我很确定它只是为文档对象上的事件附加一个事件处理程序,并解析事件对象以检测哪个元素触发了该事件。 – 2009-09-19 22:00:47

+0

非常感谢。 – 2009-09-19 22:06:02