2014-09-01 41 views
0

[編輯] 這個代碼WORKjQuery的上()切換類時不起作用

實測出了多個上相同的事件/類()處理。 [/編輯]

我用下面的代碼:

$selector.on('click', '.heya', function($e){ 
    alert('heya'); 
    jQuery(this).attr('class', 'byebye'); 
}); 


$selector.on('click', '.byebye', function($e){ 
    alert('byebye'); 
    jQuery(this).attr('class', 'heya'); 
}); 

現在點擊的元素之一,一旦工作正常,但點擊它的時候都再次回調被調用。不知何故之前的「on()」觸發器沒有被刪除。有人知道爲什麼 我知道我可以以不同的方式解決這個問題,但這將是最乾淨的解決方案...

+1

你的代碼工作正常,在這裏;只有正確的點擊事件處理程序是基於元素的當前類執行的:http://jsfiddle.net/ex63qqu8/ – 2014-09-01 12:20:38

+0

你可以發佈你的html可能是一個問題嗎? – Esko 2014-09-01 12:24:08

+2

問題可能是'$ selector'。 – Barmar 2014-09-01 12:25:06

回答

2

改爲使用addClassremoveClass方法。

$selector.on('click', '.heya', function($e){ 
    alert('heya'); 
    $(this).removeClass("heya").addClass("byebye"); 
}); 

$selector.on('click', '.byebye', function($e){ 
    alert('byebye'); 
    $(this).removeClass("byebye").addClass("heya"); 
}); 
+0

雖然這是一個好主意,但我不明白它將如何解決問題 – Barmar 2014-09-01 12:22:09

+0

在那裏,完成那麼..不起作用 因此,雖然在某些情況下,它可能會更喜歡這樣做..有時只調用一種方法,而不是2更好(因爲在更少的情況下) – 2014-09-01 12:28:02

+0

好吧,使用你的方法可以打破如果有一天你在標記中添加了更多的類,可以通過添加一個return語句來修復它嗎?現在不能測試.. – 2014-09-01 12:31:00

0

試試這個會幫助你解決你的問題。

$(".heya").on('click', function($e){ 
    alert('heya'); 
    $(this).attr('class', 'byebye'); 
}); 


$(".byebye").on('click', function($e){ 
    alert('byebye'); 
    $(this).attr('class', 'heya'); 
}); 
+0

沒辦法,當頁面加載時,它們會根據它們的類綁定它們。如果類動態改變,代理團隊 – Barmar 2014-09-01 12:24:00

+0

關於使用on()的一個漏洞是,你並不是真的將一個事件綁定到每個元素,而只是一個事件到父元素,這使得它更好你試圖將點擊綁定到1000個元素。你的方法可能會工作,但沒有什麼比使用jQuery('。heya')click()更好,並且將創建1000個事件處理程序而不是1個。 – 2014-09-01 12:26:51

-1

試試這個代碼:

$(".heya,.byebye").on('click', function($e){ 

    $(this).toggleClass('byebye heya'); 

}); 

JSFiddle