요소에 클릭 핸들러가 있는지, 변경 핸들러가 있는지, 또는 jQuery를 사용하여 요소에 바인딩된 이벤트 핸들러가 있는지 확인할 수 있나요?
또한 주어진 이벤트 유형에 대해 얼마나 많은 클릭 핸들러(또는 어떤 종류의 이벤트 핸들러)가 있는지, 그리고 이벤트 핸들러에 어떤 함수가 있는지 확인할 수 있습니까?
이 정보는 데이터 캐시에서 가져올 수 있습니다.
예를 들어 콘솔(파이어버그, ie8)에 로그합니다:
console.dir( $('#someElementId').data('events') );
를 입력하거나 반복합니다:
jQuery.each($('#someElementId').data('events'), function(i, event){
jQuery.each(event, function(i, handler){
console.log( handler.toString() );
});
});
또 다른 방법은 다음 북마클릿을 사용할 수 있지만 런타임에는 도움이 되지 않습니다.
하지만 아직 존재하지 않는 바인딩하면 서있느라 끕니까 때 가장 효과적인 솔루션을 충분한 것 같다! 두 번째 '클릭' 때 확실하게 바인딩하면 복사본을 만들지 않을 것을 알 수 있습니다.
그러므로 내가 사용하여 다음과 같은 죽사오나 () 또는 해제 ()
$("#someid").die("click").live("click",function(){...
또는
$("#someid").unbind("click").bind("click",function(){...
또는 최근 버전을 포함한다.
$("#someid").off("click").on("click",function(){...
저는 정확히 이 작업을 수행하는 hasEventListener라는 플러그인을 작성했습니다:
http://github.com/sebastien-p/jquery.hasEventListener
도움이 되길 바랍니다.
이 솔루션은 블로그에서 바로 읽을 수 있는 유일한 1.8pb jQuery 이후 더 이상 사용할 수 있습니다.
>. $ (요소) .data ("이벤트"): 이 제거된 1.8 수 있지만 여전히 얻을 수 있다. >. 이벤트를 통해 데이터 디버깅 목적으로 $ ._data (요소, events" ";). >. 참고로 이 지원되지 않는 공용 인터페이스. 실제 데이터 >. 호환성이 version. 충스러웠으니 버전을 구조를 변경할 수 있습니다.
따라서 이 경우, 또는 단순히 해제 합니다 / 바인딩 부울입니다 direct-attached 방관하겠나 행사 등을 결정하는 데 사용하는 것으로, 즉 제 생각에는 최적의 솔루션을).
언급 된 hasEventListener 플러그인은 사용자 정의 이벤트를 처리하지 않는다고 생각합니다.
var obj = {id:'test'};
$(obj).bind('custom', function(){
alert('custom');
}).trigger('custom');
alert($(obj).hasEventListener('custom'));
또한 적어도 jQuery 1.5에서는 위와 같이 객체에 바인딩 된 이벤트에 대해 다르게 반환되므로 $(target).data('events')를 사용하는 데주의해야한다고 생각합니다.
다음과 같은 작업을 수행해야 합니다:
var events = $(target).data("events");
if(typeof events === "function"){
events = events.events;
}
이런 종류의 접근 방식을 사용하고 있으며 작동하지만 jquery 내부의 자비에 맡겨져있는 것처럼 느껴지며 실제로는 그렇게해서는 안됩니다!
난 이미 같은 & 합니다. 기존 코드를 패치됨 빠르게 일을 할 수 있는 이 같은 일이.
if( $('.scroll').hasHandlers('mouseout') ) // could be click, or '*'...
{
... code ..
}
대표단은 작동하잖아 이벤트에 대한 너무:
if ( $('#main').hasHandlers('click','.simple-search') ) ...
여기에 사용할 수 있습니다. jquery-handler-toolkit.js
대한 참조를 사용하여 SJG& # 39 의 오토메이티드 에서 W3Schools.com
jquery 버전 1.7, off () 은 새로운 방법을 >, vmware. 바인딩 (), 다이 () 와 운엘게이트 () 을 대체할 수 있습니다. 이 방법은 많은 누구이뇨 일관성을 API, 때문에 이 방법을 사용하는 것이 좋습니다 코드 기반을 단순화됩니다 포함한다.
따라서:
$("#someid").off("click").live("click",function(){...
또는
$("#someid").off("click").bind("click",function(){...