簡體   English   中英

事件偵聽器多次調用Javascript函數

[英]Javascript function gets called multiple times by event listener

我有一個無法調試的怪異問題。

我有一個具有以下相關功能的腳本:

  • 一個內部帶有jQuery.on('click', callback(event))事件綁定器的events()函數。 每次我使用AJAX添加或刪除錨點時都會調用該函數,但這與該問題無關。

  • 一個函數get_passwords() ,它從錨點$("a.active")獲取jQuery.attr("href")並通過回調向服務器發送$.post ,該回調在接收到數據后將值插入表中

像這樣在callback(event)函數中同步調用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()函數,並且每次在該事件的錨點上單擊時,都會在任意但恆定的時間后停止調用該函數。監聽器。

我已經在上面指定的行中在FireBug中設置了斷點,並且在逐步執行腳本時,它所做的只是在上面設置的兩個斷點之間跳轉(它調用get_passwords()和執行$.post ,4次(總是相同的數量),直到它實際進行$.post函數中的回調的第4次為止。

意識到我無法讓任何人閱讀我編寫的所有代碼,有人對這個錯誤可能來自何處有任何建議嗎?

先感謝您。

編輯: http : //jsfiddle.net/nt3A4/

您是否正在尋找event.stopImmediatePropagation()?

@ epascarello,@ nbrooks,

你們倆都是對的。 我以某種方式將多個事件偵聽器附加到同一錨。 可能是由於我的編碼計划不當而迷路了(我一直在整理網站功能)。

無論如何,我通過在events()函數中添加$(“ a”)。off()來解決此問題,以刪除以前可能設置的任何其他事件偵聽器。 應該從一開始就這樣做:/

謝謝大家的回答和時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM