2013-07-24 2 views
1

CSS 클래스의 존재 여부에 따라 함수를 삭제하려고합니다.jQuery - 함수를 파괴하지 않으면 클래스가 있는지 확인하십시오.

클래스 .active을 확인하고 싶습니다.이 클래스는 버튼을 클릭하여 전환됩니다. 은 내가 .active 클래스의 제거 후 그것을 파괴하려는 반면 나는 .active 아직이 기능이 실행을 제거하면,하지만 한 번만 작동

if(jQuery(#test).hasClass('.active')

를 사용했습니다.

나는 또한 .unbind()을 시도했지만 사용하지 않았습니다.

나는 완전히 .active 클래스 당신이 요소를 강조 중지하려면 단순히 의미 '기능을 파괴'에 의해 가정

function destroy_no_active_class(){ 
     jQuery('#test.active').mouseover(function (e) { 
       e.stopPropagation();e.preventDefault(); 
       jQuery(this).addClass('highlight'); 
      }).mouseout(function() { 
       jQuery(this).removeClass('highlight'); 
      }).click(function(e){ 
       e.stopPropagation(); 
       e.preventDefault(); 
       show_data(this); 
      }); 

     }); 
    } 

답변

4

을 제거한 후이 기능을 파괴 할 방법을 가르쳐주세요, 당신은 단순히 내에서 확인하실 수 있습니다 처리기가 일단 트리거되면 조건부로 논리를 실행합니다. 또한 요소가 '활성'상태가되면 자동으로 다시 작동하므로 처리기의 바인딩을 해제하는 것보다 유용합니다.

핸들러 내에서
function destroy_no_active_class(){ 
    jQuery('#test').on('mouseover.mine mouseout.mine', function (e) { 
      if ($(this).is(".active")) { 
       e.stopPropagation(); 
       e.preventDefault(); 
       jQuery(this).toggleClass('highlight'); 
      } 
     }).on('click.mine', function(e){ 
      if ($(this).is(".active")) { 
       e.stopPropagation(); 
       e.preventDefault(); 
       show_data(this); 
      } 
     }); 
    }); 
} 

, 당신은 다른 방법

if (!$(this).is(".active")) { 
    $(this).off('mouseover.mine mouseout.mine click.mine'); 
} 

을 할 수있는 이곳의 단점은 요소가 다시 활성화 될 경우, 당신은 핸들러를 리 바인드해야한다는 것입니다. ($ 단순히 jQuery의 별칭입니다 있습니다. 당신은 이름 충돌이있는 경우, 당신이하고있다으로 위의 코드에서 $에 대한 jQuery을 대체합니다.)

+0

네, 당신의 아이디어는 훌륭합니다. 당신의 코드를 시도 할 것입니다 – user007

+0

[이벤트 이름만으로 꺼져있는] (http://api.jquery.com/off/)을 사용할 때 조심해야 할 것은 모든 핸들러가 제거된다는 것입니다 : "해당 유형의 모든 이벤트 (직접 및 위임 모두)가 jQuery 세트의 요소에서 제거됩니다." 귀하의 경우에는 괜찮을 지 모르지만 알고 있어야 할 사항입니다. – dc5

+0

하지만 같은 요소에서 드래그 가능하고 짧을 수 있습니다. – user007

1

.unbind은() 이벤트 동작을 제거하는 올바른 방법입니다 .

코드에 오류가 있습니다. 사용중인 선택기와 주위에 따옴표가 있어야하는지 여부에주의하십시오.

if ($('#test').hasClass('active')) { 
    $('#test').unbind().removeClass('active'); 
} 
+2

원하는대로, DC5 @ – dc5

1

질문을 올바르게 이해하면 이벤트 처리기를 제거한 후 제거하고 싶습니다. 이런 경우 당신이 그것을 전달할 수 있도록 당신이 이벤트 핸들러를 제거 할 때

, 당신은 핸들러 함수에 대한 참조를 유지

  1. 에 필요하거나
  2. 사용 jQuery's event.namespace capability

jQuery 1.7 on/off는 이벤트 처리기를 추가하는 데 선호되는 방법입니다.

관련 문제