我有一个奇怪的问题,我无法调试。
我有一个包含以下相关功能的脚本:
一个函数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可能来自何处提出任何建议?
提前谢谢。
答案 0 :(得分:1)
您在寻找event.stopImmediatePropagation()吗?
答案 1 :(得分:0)
@epascarello,@ nbrooks,
你们都是对的。我以某种方式将多个事件监听器附加到同一个锚点。可能因为我的编码规划不佳而迷路了(我一直在制作网站功能)。
无论如何,我在事件()函数中通过预先挂起的$(&#34; a&#34;)。off()来修复它,以删除之前可能已设置的任何其他事件侦听器。应该从一开始就这样做:/
谢谢大家的答案和时间。