2012-05-23 2 views
0

Ajax POST 성공 후 투표 단추를 사용하지 않는 함수를 작성하려고합니다. 투표 버튼은 POST가 완료 될 때까지 활성화 된 다음 '비활성화 됨'스타일로 고정되고 클릭 할 수 있습니다. jQuery .not() 클래스 ('비활성화 된'함께) 클릭 한 단추에서 함수를 시작하려면 사용하지 않으려 고하지만 많은 운이 아니에요. Here's a fiddle of my function so you can see my problem, 내가 누락 모르겠어요하지만 누군가가 내 오류를 찾을 수 있습니다 바라고 있어요, 그것은 나를 실망입니다 :)jQuery .not()이 함수의 요소를 필터링하지 않습니다 - 아이디어?

jQuery를 코드 :

$("a.votebutton").not(".disabled").each(function(index) { 
    var el = $(this); 
    $(this).click(function() { 
     el.addClass("active disabled").unbind("click"); 
     el.siblings().addClass("disabled"); 
    }); 
}); 

+0

매트, 하나 개의 제안. 보다 의미있는 변수 이름을 사용하십시오. 당신 엘은 e1과 많이 닮았어요. 코드를 더 쉽게 읽을 수 있도록 제안하는 것입니다 (다른 사람들과 마찬가지로). 행운을 빕니다! – jmort253

답변

4

문제

$("a.votebutton").not(".disabled") 

요 코드 줄이를 실행하는 시간에 을 해제하지 않는 모든 링크를 선택하고, 다음 : 코드가 있다는 것입니다 클릭 핸들러 할당을 통해 반복합니다. 이러한 클릭 핸들러는 나중에 "비활성화 된"클래스가 주어 지더라도 해당 링크에 바인딩 된 상태로 유지됩니다. 따라서 클릭 된 요소의 형제에 "disabled"클래스를 추가하면 해당 형제에는 여전히 작동하는 클릭 핸들러가 있습니다. 당신이 형제에서 클릭 바인딩을 해제 할 경우 그 그것을 수정해야합니다 : 그것은 위임 된 이벤트 처리를 사용하는 것입니다 할

$("a.votebutton").not(".disabled").click(function() { 
     $(this).addClass("active disabled").unbind("click") 
      .siblings().addClass("disabled").unbind("click"); 
}); 

또 다른 방법 : 당신이 .each() 필요하지 않습니다

// change 
el.siblings().addClass("disabled"); 
// to be 
el.siblings().addClass("disabled").unbind("click"); 

참고 :

$("div.panel").on("click", "a.votebutton:not(.disabled)", function() { 
    $(this).addClass("active disabled") 
      .siblings().addClass("disabled"); 
}); 

누르기 만 처리하는 그런 식으로 한 번 클릭 핸들러는 이벤트의 소스 요소 엄마 경우 실행되는 시간에 포함 사업부 ("div.panel")까지 그들이 거품 두 번째 매개 변수 인 선택자를 .on()으로 바꿉니다.

업데이트 데모 : http://jsfiddle.net/RSezp/2/

+0

도움을 주셔서 감사합니다. 감사합니다! – Matt

+0

+1 매우 철저히 – jmort253

관련 문제