我遇到了jQuery事件的問題。jQuery事件多次觸發
首先讓我解釋一下頁面設置:
主要-page.php文件中包括了:
一)頭(其中標誌是)
B)一個導航欄(其中,各種選擇是)
c)一種動態內容區域(當點擊的元素對導航欄的內容將被加載)
d)頁腳
可以說,導航條由|首頁|信息|關於我們| ...
HOME的內容是一個單獨的PHP文件,具有單獨的CSS和JS文件。所有選擇都是一樣的。
只要我選擇HOME(例如),我從動態內容區域刪除任何內容,並使用AJAX放置HOME的內容。與此同時,我刪除了與之前內容相關的任何CSS/JS文件,並且我鏈接了與加載的CSS/JS文件相關聯的文件。這部分工作完美。
現在,如果我從一個選擇切換到其他選擇(可以說,從首頁 - >消息 - >關於我們,然後回到主頁),如果我點擊一個按鈕在家裏,它會觸發多個事件倍。如果該事件導致對服務器的AJAX調用,則情況會更糟糕(想象一下調用服務器5次而不是1次)。
**我在無線電元素類的元素上使用on()事件的原因是因爲是未來的DOM元素。最初這個元素不在頁面上。
的JS代碼示例:
$(document).on('click', '.radio-element', function(){
$.ajax({
url: "js/ajax/ajaxcall.php",
success: function(output){
$('#ajaxcall-container').html(output);
}
});
});
我做什麼,我只要一點擊一個元素與類無線電元件的,我走在服務器和我取AjaxCall的輸出。 PHP腳本。
看到INSPECT ELEMENT中的NETWORK標籤,我發現click事件多次執行AJAX調用。有些時候2,其他3個甚至5
我做了什麼來解決這個問題(其中非正常工作100%):
A),使用「關」
結合之前解除綁定事件$(document).off('click','.radio-element').on('click', '.radio-element', function(){ .... });
B)使用事件。 stopImmediatePropagation()
$(document).on('click', '.radio-element', function(event){
event.stopImmediatePropagation();
//rest of code
});
下面是因爲我的一篇文章,它不會停止事件綁定過程中,它只是防止多個事件執行在讀我還沒有嘗試過的解決方案(不知道如果這會導致其他問題)。
$(document).on('click', '.radio-element', function(event){
if(event.handled !== true)
{
//Code goes here
event.handled = true;
}
});
與多個事件觸發的問題是,有一些執行不應該被多次執行動作AJAX調用(如發送電子郵件至客戶端)。
此外,這種行爲(多個事件觸發)不是我可以預測的。有時它可以正常工作,有些則連續五次觸發事件。
我一直在網上搜索了一個星期,但我試過的一切都沒有解決問題。任何解決方案將不勝感激:)
謝謝!
你嘗試過'。一( '點擊')',而不是'。對( '點擊')' ? –
這是SPA嗎?聽起來像你可能有一些緩存的JavaScript。嘗試硬刷新頁面並單擊並查看該項目被調用的次數。基本上我想知道是否綁定這個點擊函數的文件多次被帶到頁面上。 – ajmajmajma
不,我沒有嘗試過一個(),因爲我想能夠再次選擇它並執行相同的操作。例如,如果這個事件綁定在一個單選按鈕上.. – christostsang