2013-08-21 85 views
0

我遇到了讓這段代碼工作的問題。它的構建允許用戶點擊一行以通過不同類別的突出顯示來「選擇」它。如果另一行被點擊,那個被突出顯示,並且當前的一個被清除。如果一個已經被突出顯示的被再次點擊,它將被清除回正常狀態。代理和AddClass不起作用

這是在刷新頁面的ajax調用中,所以每次調用完成並插入表格的html,然後調用下面的這個函數。出於某種原因,每隔一次重新加載表格,這個工作。我跟蹤了該函數結束時不能運行的$(this).addClass(s​​electedUserClass)行。我放在那裏的調試控制檯日誌和正確的類一起工作,但下一部分由於某種原因不會添加類。

在螢火蟲中,線條由..變爲,但不變?我一直在看這個小時,我無法弄清楚。謝謝你的幫助!

function loadUserListener(style) { 
    if (style == "normal") { 
     selectedUserClass = 'selectedUser'; 
     selectedJQueryClass = '.selectedUser'; 
    } else { 
     selectedUserClass = 'selectedUserInverted'; 
     selectedJQueryClass = '.selectedUserInverted'; 
    } 
    console.log('setting'); 
    $("#selectuser").delegate("tr", "click", function() { 
     if ($(this).hasClass(selectedUserClass)) { 
      $(selectedJQueryClass).removeClass(selectedUserClass); 
     } else if ($(selectedJQueryClass)[0]) { 
      console.log('another'); 
      $(selectedJQueryClass).removeClass(selectedUserClass); 
      $(this).addClass(selectedUserClass); 
     } else { 
      console.log(selectedUserClass); 
      $(this).addClass(selectedUserClass); 
     } 
    }); 
} 
+1

該代碼不會有所意味着你將與ID'#selectuser'多個元素,和相同的委託事件處理多次,也設置。將ID更改爲類,並將委派的事件處理程序移到ajax函數之外。 – adeneo

+0

要清楚,每次調用ajax時,都會用新的表體替換舊的表體,因此不會有多個具有相同id的事物,但我將其更改爲一個類,但它不起作用。我把事件處理程序移到了外面,但它仍然不起作用。 – phouse512

+0

問題明確地說,你在每個ajax調用中調用該函數,這就是爲什麼它每隔一段時間都會工作,因爲每次添加和刪除類時都會刪除完全相同的事件處理程序,甚至會添加偶數次。現在你只需要弄清楚如何解決這個問題,並且看看**委託的**版本的on()將是一個好的開始。 – adeneo

回答

0

adeneo指出,有些事情對我來說,主要是聽者仍然存在,即使表被刷新,所以每一個AJAX調用後,偵聽器已被提上另一個導致的功能,只有作品在'甚至'電話。

我使用jquery的'off'函數在每次調用這個偵聽器加載函數時清除事件處理函數。我也將代表改爲更加正確。

我基本上是這樣做:

$('.selectuser').off("click");