2017-04-18 13 views
0

我有4個頁面加載函數,自動加載數據庫中的數據,填充數據庫中的ajax後在一個div(對於每個函數,我有一個div)用戶向下滾動。現在在這個收到的htmldata我想要一個onclick事件,並做一些更多的ajax後操作來操縱一些數據並顯示更改。jquery代碼裏面.ajaxComplete發生多次,但應該只做一次

但是當我使用

$(document).ajaxComplete(function() { 
$("#clickelement").click(function(){ 
//do some ajax post here and fill a div with the received data 
}); 

點擊功能的executet 4倍(因爲之前已經有4周阿賈克斯後的行動。當我再次單擊其executet 5倍(我認爲的onclick裏面的阿賈克斯行動觸發也.ajaxComplete),另外當我向下滾動加載更多的數據其執行甚至更多..我怎麼能繞過這一點,並激發.click只有一次,並具有點擊功能活動的所有#clickelement divs內的自動加載的HTML ?

回答

0

好吧,我現在解決了這個問題對於那些有興趣誰:

$('#divwhichisfilledwithajax').on('click', '#clickelement', function() { 
//do what the click on the #clickelement should do 
}); 

香港專業教育學院搜查了一會兒,發現我可以使用委託的事件偵聽器。我認爲這種方法會在每次AJAX調用之後堆積聽衆,因爲我不是隻針對新元素,而是針對以前的所有元素。另外它只會觸發一次。由於聽衆只添加到適合參數#clickelement

簡單幹淨:)

2

您正在將代碼添加到全局ajaxComplete事件中,這意味着它將無線只要ajax調用完成,就會被調用。

ajaxComplete(全局事件) 此事件的行爲與完整事件相同,並且每次Ajax請求完成時都會觸發。 Docs

Better docs

什麼你可能尋找的是successcomplete回調這是當地事件(只在特定的ajax調用解僱),並使用這樣的:

$.ajax({ 
    type: "GET", 
    data: {}, 
    dataType: 'text', 
    contentType: "application/json", 
    url: APP_URL + '/extension/ad/get-user-attributes/' + email, 
    success: function(response) { 
    // fires when THIS ajax request returns successfully 
    }, 
    error: function(xhr, status, error) { 
    // fires when THIS ajax request returns an error 
    }, 
    complete: function(xhr, status) { 
    // fires when THIS ajax request completes (after success or error) 
    } 
}); 

對於completesuccess之間的差異see this other answer

+0

新加載的內容我會試試看,謝謝! – chwzr

+0

它的工作,ive把.click函數放在它自己的函數中,然後我在ajax post函數的成功部分中執行這個函數..但是當我現在向下滾動(更多數據被加載並且成功部分中的相同函數現在被觸發了兩次,因此.click代碼被觸發了兩次,但只在第一次加載的數據上觸發了。 – chwzr

+0

我們需要查看所有執行這些操作的代碼。您在此顯示的內容不會執行任何操作,一定還有其他事情在發生,但是我們需要看到它 – DelightedD0D