Javascript函数被事件监听器多次调用

时间:2014-07-31 01:13:13

标签: javascript jquery ajax

我有一个奇怪的问题,我无法调试。

我有一个包含以下相关功能的脚本:

  • 一个函数events(),其中包含jQuery.on('click', callback(event))个事件绑定器。每次使用AJAX添加或删除锚点时都会调用该函数,但这与此问题无关。

  • 函数get_passwords()jQuery.attr("href")获取$("a.active")并使用回调函数向服务器发出$.post,该回调在接收到表时将值插入表中数据

函数get_passwords()在回调(事件)函数中同步调用,如下所示:

event.preventDefault(); //prevents a browser navigation
$("a.active").removeClass("active"); //removes active class from all other anchors
$(this).addClass("active"); //adds a class "active" to the anchor that was clicked
get_passwords(); <---- the function in question <--BREAKPOINT #1

函数get_passwords()包含以下相关行:

$.post("url", postData, function(data) { //put received data into table }); <--BREAKPOINT #2

现在,奇怪的错误是get_passwords()函数被同一个事件监听器称为多次次,并且只停止在任意后调用该函数,但常量< / em>每次在具有事件侦听器的锚点上进行单击时的次数。

我在上面指定的行中设置了FireBug中的断点,当我逐步执行脚本时,它所做的只是在上面设置的两个断点(它调用get_passwords()的部分)之间跳转。它执行$.post,执行4次(总是相同的数量),直到第4次实际进行$.post函数中的回调。

意识到我无法让任何人阅读我编写的所有代码,有没有人对这个bug可能来自何处提出任何建议?

提前谢谢。

编辑:http://jsfiddle.net/nt3A4/

2 个答案:

答案 0 :(得分:1)

您在寻找event.stopImmediatePropagation()吗?

答案 1 :(得分:0)

@epascarello,@ nbrooks,

你们都是对的。我以某种方式将多个事件监听器附加到同一个锚点。可能因为我的编码规划不佳而迷路了(我一直在制作网站功能)。

无论如何,我在事件()函数中通过预先挂起的$(&#34; a&#34;)。off()来修复它,以删除之前可能已设置的任何其他事件侦听器。应该从一开始就这样做:/

谢谢大家的答案和时间。