Programming

jQuery를 사용하여 요소에 바인딩 된 이벤트를 찾을 수 있습니까?

procodes 2020. 3. 1. 16:05
반응형

jQuery를 사용하여 요소에 바인딩 된 이벤트를 찾을 수 있습니까?


이 링크에서 두 개의 이벤트 핸들러를 바인딩합니다.

<a href='#' id='elm'>Show Alert</a>

자바 스크립트 :

$(function()
{
  $('#elm').click(_f);
  $('#elm').mouseover(_m);
});

function _f(){alert('clicked');}
function _m(){alert('mouse over');}

요소에 바인딩 된 모든 이벤트 목록을 가져올 수있는 방법이 id="elm"있습니까?


최신 버전의 jQuery에서는이 $._data메소드를 사용하여 jQuery가 해당 요소에 첨부 한 모든 이벤트를 찾습니다. 참고 , 이것은 내부에서만 사용 방법 :

// Bind up a couple of event handlers
$("#foo").on({
    click: function(){ alert("Hello") },
    mouseout: function(){ alert("World") }
});

// Lookup events for this particular Element
$._data( $("#foo")[0], "events" );

결과는 $._data우리가 설정 한 두 이벤트를 모두 포함하는 객체가됩니다 ( mouseout속성이 확장 된 상태에서 아래 그림 참조 ).

$ ._의 콘솔 출력

그런 다음 Chrome에서 핸들러 함수를 마우스 오른쪽 버튼으로 클릭하고 "함수 정의보기"를 클릭하여 코드에서 정의 된 정확한 지점을 표시하십시오.


일반적인 경우 :

  • 히트 F12열려있는 개발 도구에
  • Sources탭을 클릭 하십시오
  • 오른쪽에서 아래로 스크롤 Event Listener Breakpoints하여 트리를 확장합니다.
  • 듣고 싶은 이벤트를 클릭하십시오.
  • 대상 요소와 상호 작용합니다. 발사하면 디버거에 중단 점이 생깁니다.

마찬가지로 다음을 수행 할 수 있습니다.

  • 대상 요소를 마우스 오른쪽 버튼으로 클릭하고 " Inspect element"를 선택하십시오 .
  • dev 프레임의 오른쪽에서 아래로 스크롤하면 맨 아래는 ' event listeners'입니다.
  • 트리를 확장하여 요소에 첨부 된 이벤트를 확인하십시오. 이것이 버블 링을 통해 처리되는 이벤트에 작동하는지 확실하지 않습니다 (추천하지 않습니다)

나는 후손을 위해 이것을 추가하고 있습니다; 더 많은 JS를 작성하지 않는 더 쉬운 방법이 있습니다. 은 Using 파이어 폭스에 대한 놀라운 불을 지르고 애드온을 ,

  1. 요소를 마우스 오른쪽 버튼으로 클릭하고 'Firebug로 요소 검사'를 선택하십시오.
  2. 사이드 바 패널 (스크린 샷에 표시)에서 작은> 화살표를 사용하여 이벤트 탭으로 이동하십시오.
  3. 이벤트 탭에는 각 이벤트에 대한 이벤트 및 해당 기능이 표시됩니다
  4. 옆의 텍스트는 기능 위치를 보여줍니다

여기에 이미지 설명을 입력하십시오


이제 자바 스크립트 함수 getEventListeners ()를 사용하여 객체에 바인딩 된 이벤트 리스너 목록을 얻을 수 있습니다.

예를 들어 dev 도구 콘솔에 다음을 입력하십시오.

// Get all event listners bound to the document object
getEventListeners(document);

jQuery를 감사 플러그인 플러그인은 일반 크롬 개발 도구를 통해이 작업을 수행 할 수 있도록해야한다. 완벽하지는 않지만 일반적인 jQuery 핸들러뿐만 아니라 요소 / 이벤트에 바인딩 된 실제 핸들러를 볼 수 있어야합니다.


if ($ ._ data ($ ( "a.wine-item-link") [0]). events == null) {... 무언가를 사용하여 이벤트 핸들러를 다시 바인딩하는}} 내 요소가 이벤트에 바인딩 된 경우. 해당 요소에서 모든 이벤트 핸들러를 연결 해제 한 경우 여전히 정의되지 않음 (널)이라고 표시됩니다. 이것이 내가 if 표현식에서 이것을 평가하는 이유입니다.


이는 FireFox Quantum 58.x에서 jQuery 선택기 / 개체에만 해당되는 것은 아니지만 Dev 도구를 사용하여 요소에서 이벤트 핸들러를 찾을 수 있습니다.

  1. 요소를 마우스 오른쪽 버튼으로 클릭
  2. 상황에 맞는 메뉴에서 '요소 검사'를 클릭하십시오.
  3. 요소 (노란색 상자) 옆에 'ev'아이콘이 있으면 'ev'아이콘을 클릭하십시오.
  4. 해당 요소 및 이벤트 핸들러에 대한 모든 이벤트를 표시합니다.

FF 양자 개발 도구


Note that events may be attached to the document itself rather than the element in question. In that case, you'll want to use:

$._data( $(document)[0], "events" );

And find the event with the correct selector:

여기에 이미지 설명을 입력하십시오

And then look at the handler > [[FunctionLocation]]

여기에 이미지 설명을 입력하십시오


When I pass a little complex DOM query to $._data like this: $._data($('#outerWrap .innerWrap ul li:last a'), 'events') it throws undefined in the browser console.

So I had to use $._data on the parent div: $._data($('#outerWrap')[0], 'events') to see the events for the a tags. Here is a JSFiddle for the same: http://jsfiddle.net/giri_jeedigunta/MLcpT/4/

참고URL : https://stackoverflow.com/questions/2008592/can-i-find-events-bound-on-an-element-with-jquery



반응형