2011-07-18 168 views
2

裏面我有一個小問題,一個AJAX功能:的Javascript AJAX請求

  1. PAGE A代表的頁面。
  2. PAGE X代表加載的內容。
  3. RES A代表頁面結果。
  4. RES B代表一些AJAX加載的內容=>新結果。

PAGE A包含20個結果,可以刪除每個結果,並通過AJAX(PAGE X)加載新結果。

實施例:

用戶是第A: - > PAGE甲負載JS 「點擊」 功能。 - >結果是RES A(20x)。

當用戶從RES A(1×)中刪除的結果,AJAX加載一個新的結果RES B(1×):

用戶是-still-上PAGE A. - > PAGE X裝載有js「點擊」功能。 - >結果是RES B(1X)

爲了增加點擊功能RES B,我不得不重裝打火機JS但

因此當用戶移除乘以RES A的功能RES A的結果(刪除5個結果後的結果爲1x5),RES B結果乘以5x(用戶得到的結果是5x,而不是1x)。

你明白了嗎?簡而言之,AJAX請求乘以x RES B而不是堅持1請求。你有什麼線索可以保持我的RES B 1x嗎?

謝謝!

回答

2

任何
使用unbind().click()unbind().bind('click'),或die().live()我想你每次重新結合的Click事件,而「重新加載一個打火機JS」。 Javascript不會替換事件函數 - 它們只是連接在一起。如果您使用jQuery使用live添加點擊事件。如果您沒有 - 在重新加載之前清除當前點擊事件

+0

現場只是做:d感謝 – kfa

1

似乎事件多次連接。您使用的

+0

真棒,生活()只是全球化的功能^^謝謝! – kfa

+0

感謝與+1 stackoverflow ^^ – corbacho

+0

他們不讓我! 。但是... :( – kfa

0

您需要做的是在加載時處理結果(1x)。一個簡單的方法可以是當你加載並刪除一次完成後,將一個類添加到結果中。

例如

$('.newresult .clickbutton').ready(function(){ 
    // Do something 
}); 

$('.newresult').removeClass('newresult'); 
1

你的解釋是真的難以理解,但如果我理解正確的問題在於,你同一元素多次綁定的事實。

在你的情況下,最好的解決方案是使用jQuery .delegate('#datatable a', 'click', function(e){ /* DO STUFF */}),它允許將所有選擇器匹配元素綁定一次(在這種情況下,例如,如果你有一個id = datatable的表,其內部的每個鏈接將始終綁定到該處理程序,即使您向該表添加更多的html,或刪除一些),以後您將不必擔心。

但是,如果您不使用jQuery,唯一的解決方法是在添加它們之前解除綁定事件(以刪除已存在的綁定),然後再次綁定它們。

+0

洛爾我知道:(我使用jQuery和** **直播功能只是固定它。 – kfa

+0

委託拍住在性能方面,特別是如果你有更大的表,這是更有效的父元素綁定,並找出被點擊了什麼在代碼中比綁定每一個單元格等 – zatatatata