2012-05-10 63 views
0

jQuery有一個令人困惑的問題,基本上這個代碼被添加到2個元素,並且工作正常,但是如果你點擊一個單獨的元素,從這些元素的類會阻止他們workign,但即使沒有課,他們仍然在工作......在這裏一些代碼。.removeAttr刪除類,tho腳本仍然有效

$(".q1a1, .q1a3").click(function (e) { 
e.preventDefault(); 
$(this).animate({ backgroundColor: "#db384b" }, 1000); 
$(this).animate({ backgroundColor: "#0F437D" }, 2000); 
$(this).children('.wrong').fadeIn(1000).fadeOut(2000); 
}); 

^我想下面的代碼點擊這個代碼後不工作(如果是有道理的)

$(".q1a2").click(function (e) { 
e.preventDefault(); 
$(this).animate({ backgroundColor: "#00a6eb" }, 800); 
$('.q1a2 .correct').show(); 
$('.q1a1, .q1a3 ').removeAttr("class"); 
}); 

任何想法?

回答

0

卸下類不會幫助,因爲你已經附加了點擊事件的元素。

您應該使用解除綁定刪除

$('.q1a1, .q1a3 ').unbind("click"); 

http://api.jquery.com/unbind/

0

可以聲明在一個單獨的函數處理程序,東西類似這樣:

var SomeFunction = function(e) { 
    e.preventDefault(); 

    // your function code goes here 

    $(this).unbind(SomeFunction); // and this removes the handler from the element on the first click 
}; 

$(".q1a1, .q1a3").click(SomeFunction); 
1

嘗試做一個.unbind()。看起來像這樣。 $('。q1a1,.q1a3').unbind('click'); $('。q1a2,

你可以閱讀更多關於.unbind()http://api.jquery.com/unbind/

+0

更可靠的方法是創建一個單獨的處理程序,並僅執行解除綁定您的處理程序。這可以防止下游問題。上面包含的鏈接提供了很好的例子和相關的討論。 – user1020746

+0

我認爲這就是我在回答中顯示的內容 – MilkyWayJoe