이벤트 리스너에 DOM 에 JavaScript 코드를 찾는 방법을 디버깅 시 노드입니다 호출하든?

I have a 페이지를 선택하고 있는 가운데 이벤트 리스너에 첨부됩니다 입력란이 내려왔습니다. Dom 노드입니다 특정 이벤트 리스너로 확인할 수 있는 방법이 관찰 및 뭐하러요 이벤트?

이벤트는 direct-attached 사용:

  1. # 39 의 Prototype& ',' 프랑드로브세르베
  2. 39 의 ',' dom& addEventListener

  3. '속성' 엘레망스언크리크 요소점과 있다.
질문에 대한 의견 (2)
해결책

방금 # 39 의 경우 what& 검사 하는 일이 이 인텔®visual 이벤트 북마크 페이지에 할 수 있습니다.

  • 업데이트 *: [인텔®visual 이벤트 2] [2] 사용할 수 있습니다.

[2]: http://www.sprymedia.co.uk/article/Visual+Event + 2

해설 (13)

이 방식에 따라 다릅니다 이벤트는 첨부됩니다. 설명하기 위한 그림으로의 선택하시려면 처리기에서 다음과 같습니다.

var handler = function() { alert('clicked!') };

39, re we& 될 수 있는 다른 방법을 사용하여, 검사 및 일부 첨부하려면 迈向 lionbridge 요소점 don& # 39, 일각에서는 없다.

싱글 이벤트 핸들러를 메서드입니다 A)

element.onclick = handler;
// inspect
alert(element.onclick); // alerts "function() { alert('clicked!') }"

여러 이벤트 핸들러도 메서드입니다 B)

if(element.addEventListener) { // DOM standard
    element.addEventListener('click', handler, false)
} else if(element.attachEvent) { // IE
    element.attachEvent('onclick', handler)
}
// cannot inspect element to find handlers

메서드입니다 C): jQuery

$(element).click(handler);

1.3.x -

검사 // var 클라이케벤츠 = $ (요소) (events&quot ";), .data 클릭하십시오. 이케리드레이크 (클라이케벤츠, 함수 (키 값) { 경고 (가치) / / 경고에는 &quot, 함수 () {경고 (& # 39, & # 39 을!;) } &quot. })

  • 1.4.x 에 (저장합니다 인사이드라면 처리기에서 객체를)

검사 // var 클라이케벤츠 = $ (요소) (events&quot ";), .data 클릭하십시오. 이케리드레이크 (클라이케벤츠, 함수 (key, 앙드레로비) { 경고 (앙드레롭j.핸들러) / / 경고에는 &quot, 함수 () {경고 (& # 39, & # 39 을!;) } &quot. // 확인할 수 있습니다. 앙드레롭j.남스파스 앙드레로비스티페, })

&lt, sup&gt. (참조 ['제크리스프노스트라다'] [1] 및 '제크리스트라다') &lt /sup>;

메서드입니다 속도입니다.4): 프로토타입 (과도한)

$(element).observe('click', handler);
  • 1.5.x

검사 // 프랑드롭스버스트레이치 (함수 (item) { if (항목설명프로세서 [0] = 요소) { 경고 (항목설명프로세서 2) / / 경고에는 &quot, 함수 () {경고 (& # 39, & # 39 을!;) } &quot. } })

  • 1.6 1.6.0.3 (attaboy 매우 어려운 여기서요) 를 포함)

// 점검. &quot _eventId"; 캐비닛용입니다 &lt. 한편 1.6.0.3 // &quot _prototypeEventID"; 1.6.0.3 도입됐다 var 클라이케벤츠 = 프랑스카치 [element._eventId (element._prototypeeventid []) [0]], 클릭하십시오. 클라이크프랑스 드레이크 (함수 (래퍼) { 경고 (라라페리핸들러) / / 경고에는 &quot, 함수 () {경고 (& # 39, & # 39 을!;) } &quot. })

  • 1.6.1 (조금 나은)

검사 // var () (& # 39, prototype_event_registry& # 39;) = 엘레망스제스토라지 클라이케벤츠 이제 이제 (& # 39, click& # 39;). 클라이크프랑스 드레이크 (함수 (래퍼) { 경고 (라라페리핸들러) / / 경고에는 &quot, 함수 () {경고 (& # 39, & # 39 을!;) } &quot. })

[1]: http://docs.jquery.com/Core/data # 이름

해설 (8)

크롬, 파이어폭스, 비발디 및 사파리는 '게테벤트리스트너스 (도메르망)' 가 그들의 개발자 도구 콘솔이군요.

이 경우, 대부분의 디버깅하지 용도로 사용할 수 있습니다.

다음은 아주 좋은 참조입니다 사용할 수 있습니다.

게테벤트리스트너스 https://developers.google.com/web/tools/chrome-devtools/console/utilities

해설 (9)

크롬 브라우저로 웹킷 검사자를 또는 Safari 에서 지금 이거. 또 이벤트 리스너로 표시하십시오 DOM element 의 요소에 대한 선택할 경우 창뿐만.

해설 (3)
    • 나열하십시오 이벤트 리스너에 JavaScript 로 모든 것이 가능하다. # 39 의 it& 것이 아니라 하드. 그냥 '& # 39 를 해킹할 수 있는 방법은' 프로토타입 (prototype) 의 HTML 요소 ( 추가 전에 리스너에).
function reportIn(e){
    var a = this.lastListenerInfo[this.lastListenerInfo.length-1];
    console.log(a)
}

HTMLAnchorElement.prototype.realAddEventListener = HTMLAnchorElement.prototype.addEventListener;

HTMLAnchorElement.prototype.addEventListener = function(a,b,c){
    this.realAddEventListener(a,reportIn,c); 
    this.realAddEventListener(a,b,c); 
    if(!this.lastListenerInfo){  this.lastListenerInfo = new Array()};
    this.lastListenerInfo.push({a : a, b : b , c : c});
};

이제 모든 요소를 갖고 라스트리스텐린포 느릅 나무 '속성' 앵커 ('a') 는 리스너에 모두 포함되어 있습니다. 그리고 심지어 제거하기 위한 작동됨 함께 리스너에 익명 총괄하였습니다.

해설 (8)
  • 게테벤트리스트너스 사용할 수 있는 구글 크롬 *:
getEventListeners(document.getElementByID('btnlogin'));
getEventListeners($('#btnlogin'));
해설 (3)

(또 답을 [이 질문] [1] # 39 의 it& 이후 관련 목마르겠구나)

내가 보고 싶은 경우 디버깅할 때 이벤트를 추천합니까 중 하나.

  1. [인텔®visual 이벤트] [2]
  2. , 가 요소를 섹선에서 Chrome& # 39 의 개발자 도구. 요소를 선택하고, 이벤트 Listeners&quot &quot 찾습니다. 오른쪽 하단에 있는 (유사한 Firefox 에서)

이벤트 사용하려면 코드에서 사용하는 이전 버전의 jQuery 1.8, 사용할 수 있습니다.

$(selector).data("events")

afaq 이벤트. Vmware. 사용하여 버전 1.8, .data (events&quot ";) 가 단종된 자세한 내용은 이 버그는 티켓). 사용할 수 있습니다.

$._data(element, "events")

또 다른 예를 들어: 모든 클릭 이벤트 쓰기 특정 https://partner. microsoft. 콘솔:

var $myLink = $('a.myClass');
console.log($._data($myLink[0], "events").click);

자세한 내용은 http://jsfiddle.net/HmsQC/ 의 apc® 예)

이 때문에 사용하지 않는 것이 좋습니다 , $ ._data 죄송합니다. 사용하여 디버깅하지 제외한 jQuery 는 내부 구조, 향후 릴리스에서는 변경할 수 있다. 내가 아는 다른 수단을 액세스하면 간편해집니다 죄송합니다. 없는 이벤트.

[1]: # 13017468 https://stackoverflow.com/questions/2382994/how-to-check-if-any-javascript-event-listeners-handlers-attached-to-an-element-d/13017468 [2]: http://www.sprymedia.co.uk/article/Visual+Event + 2

해설 (2)

1: '는' 프로토티페드로 세르베 엘레멘스트라데벤트리스트너 (http://otl. [소스코드] (https://github.com/sstephenson/prototype/blob/ecacc02/src/prototype/dom/event.js # L759))

2: '기억' 을 추가 리스너에 엘레멘스트라데벤트리스트너 무시할 수 있습니다 (핸디 '속성' 에번트리스트너리스트 제거되는 DOM3 사양명세 제안). 이 코드를 실행 전에 이벤트 bsc247-3:

(function() {
  Element.prototype._addEventListener = Element.prototype.addEventListener;
  Element.prototype.addEventListener = function(a,b,c) {
    this._addEventListener(a,b,c);
    if(!this.eventListenerList) this.eventListenerList = {};
    if(!this.eventListenerList[a]) this.eventListenerList[a] = [];
    this.eventListenerList[a].push(b);
  };
})();

모든 이벤트를 통해 읽기:

var clicks = someElement.eventListenerList.click;
if(clicks) clicks.forEach(function(f) {
  alert("I listen to this function: "+f.toString());
});

39 ',' t forget 및 don& 무시하려면 엘레멘스콜리모비번트리스트너 사용자 정의 이벤트 '에서' 엘레멘스윈번트리스트너리스트 분리하십시오.

3: 이 '속성' 엘레망스언크리크 각별한 주의가 필요한 위치:

if(someElement.onclick)
  alert("I also listen tho this: "+someElement.onclick.toString());

4: # 39 는 ',' t forget don& 엘레망스언크리크 컨텐트입니다 속성: 이들은 서로 다른 두 가지가 있는데

someElement.onclick = someHandler; // IDL attribute
someElement.setAttribute("onclick","otherHandler(event)"); // content attribute

그래서 처리하는 데 필요한 it, too.

var click = someElement.getAttribute("onclick");
if(click) alert("I even listen to this: "+click);

시각적 이벤트 북마크 (가장 많이 언급된 오토메이티드) 만 사용자 정의 라이브러리란 처리기에서 도루 캐시에는:

&gt. 제공하는 W3C 표준 방법이 없는 것으로 나타났다 &gt. 권장됨 DOM 인터페이스입니다 이벤트 리스너로 무엇인지 찾을 수 있다. &gt. 첨부됩니다 특정 요소. 이렇게 되기 위해 나타날 수 있습니다. &gt. 이에 따라 속성 불렀으매 포함시키십시오 감독 있었다 &gt. 그러나 그는 DOM 레벨 3 에 에번트리스트너리스트 사양명세 &gt. 외람되나 제거한 후에 구배합니다. 이렇듯 수밖에 없는 &gt. 개별 자바스크립트 라이브러리, 이는 일반적으로 바라보았다 &gt. 캐시 유지관리하지 첨부됨 이벤트 (나중에 수 있도록 제거할 수 있다. &gt. 그 밖의 유용한 추상화를). &gt. &gt. 이 같은 이벤트를 위해 인텔®visual 이벤트 표시하십시오 수 있어야 합니다 &gt. 구문 분석 이벤트 정보를 Javascript library.

요소점 재정의을 문제가 있을 수 있습니다 (예를 들어 있기 때문에 DOM 에 코딩할 수 없는 등 일부 특정 기능을 라이브입니다 컬렉션, JS) 는 기본적으로 크롬, 파이어폭스, 오페라 의 하지만 에번트리스트너리스트 지원부에서는 및 작동하잖아 (doesn& # 39, t 작업하십시오 IE7).

해설 (0)

이벤트 리스너에 넣어 줄 수 있습니다 넷윈을 DOM 관리하는 방법을 통해 ',' 이 맨 위에 &lt, head&gt.

<script>
    (function(w){
        var originalAdd = w.addEventListener;
        w.addEventListener = function(){
            // add your own stuff here to debug
            return originalAdd.apply(this, arguments);
        };

        var originalRemove = w.removeEventListener;
        w.removeEventListener = function(){
            // add your own stuff here to debug
            return originalRemove.apply(this, arguments);
        };
    })(window);
</script>

H/T @les2

해설 (2)

Firefox 개발자 도구 이제 이거. 이벤트 표시됩니까 &quot 클릭하여 ev"; # 39 의 디스플레이 등 각 element& 오른쪽 버튼은 jQueryDOM 이벤트.

# 39, 파이어폭스 개발자 tools& 스크린샷은! 이벤트 리스너에 버튼을 검사자를 탭

해설 (2)

[파이어버그] [1] 경우 사용할 수 있습니다 (객체 또는 배열입니다) ',' 콘솔.디르 인쇄하려면 모든 스칼라, 배열 또는 콘솔에 있는 멋진 진단트리는 로깅합니다 JavaScript 객체.

종료기:

console.dir(clickEvents);

또는

console.dir(window);

[1]: http://en.wikipedia.org/wiki/Firebug_% 28software% 29

해설 (1)

완전 apc® 솔루션을 기반으로 동작하는 게테벤트리스트너스 [오토메이티드 얀 투론 의해] [1] - like ' ()' 의 콘솔:

(버그) 와 중복 조금 있습니다. # 39, t break it doesn& 훨씬 겁니다.)


(function() {
  Element.prototype._addEventListener = Element.prototype.addEventListener;
  Element.prototype.addEventListener = function(a,b,c) {
    if(c==undefined)
      c=false;
    this._addEventListener(a,b,c);
    if(!this.eventListenerList)
      this.eventListenerList = {};
    if(!this.eventListenerList[a])
      this.eventListenerList[a] = [];
    //this.removeEventListener(a,b,c); // TODO - handle duplicates..
    this.eventListenerList[a].push({listener:b,useCapture:c});
  };

  Element.prototype.getEventListeners = function(a){
    if(!this.eventListenerList)
      this.eventListenerList = {};
    if(a==undefined)
      return this.eventListenerList;
    return this.eventListenerList[a];
  };
  Element.prototype.clearEventListeners = function(a){
    if(!this.eventListenerList)
      this.eventListenerList = {};
    if(a==undefined){
      for(var x in (this.getEventListeners())) this.clearEventListeners(x);
        return;
    }
    var el = this.getEventListeners(a);
    if(el==undefined)
      return;
    for(var i = el.length - 1; i >= 0; --i) {
      var ev = el[i];
      this.removeEventListener(a, ev.listener, ev.useCapture);
    }
  };

  Element.prototype._removeEventListener = Element.prototype.removeEventListener;
  Element.prototype.removeEventListener = function(a,b,c) {
    if(c==undefined)
      c=false;
    this._removeEventListener(a,b,c);
      if(!this.eventListenerList)
        this.eventListenerList = {};
      if(!this.eventListenerList[a])
        this.eventListenerList[a] = [];

      // Find the event in the list
      for(var i=0;i
해설 (5)

오페라 12 아닌 최신 크롬 웹킷 엔진을 기반으로 하는) 드래곤플라이 이 있으며 표시되려면 DOM 구조에 대해 분명히 귈이예요 적이 있다. 제 생각에는 컴포지션이 탁월한 디버거 및 남은 유일한 이유는 내가 왜 계속 사용할 오페라 12 기반 버전 (버전 및 웹킷 기반 v14 v13 없다, 여전히 부족한 v15 같다)

enter 이미지 여기에 설명을!

해설 (0)

난 최근에 이벤트 작업 및 볼 수 있었으면 좋겠다고 / 제어 모든 이벤트 페이지에. # 39, ve I& 바라볼 수 있는 솔루션을 가진 내 방식대로 맞춤형 시스템을 만들어 모니터링하도록 이벤트를 적극 나서기로 했다. 그래서 세 가지 않았다.

첫째, 내가 필요한 모든 이벤트 페이지에 리스너에 컨테이너입니다. # 39 의 ',' 객체에는 that& 에번트리스트너스. 이 회사는 3 유용한 방법: '추가 ()', '제거 ()' 및 '프레젠테이션이든 ()'.

내가 만든 다음, 필요한 정보를 저장할 수 있는 ',' 객체에는 에번트리스트너 이벤트에 대한 예: '대상', '유형', '콜백하는', '옵션', '', ',' 프란츠 트루스테드 useCapture 메서드입니다 '제거 ()' 을 분리하십시오 리스너에 말했다.

마지막으로, 나는 확장됨 넷윈을 addEventListener () '와' 레모비번트리스트너 () '방법' 할 때 객체에는 작동합니까 I& 만든 # 39, ve ('에번트리스트너' 와 '에번트리스트너스').

사용법:

var bodyClickEvent = document.body.addEventListener("click", function () {
    console.log("body click");
});

// bodyClickEvent.remove();

addeventlistener () ',' 객체에는 자도으로 redhat. 에번트리스트너 만듭니다 '' '와' 에번트리스트너스 되돌려줍니다 '' 객체에는 에번트리스트너 수 있도록 재거됨 실행하십시오.

'에번트리스트너스이제 ()' 를 보는 데 사용할 수 있는 리스너에 호출이네요 이 문자열으로 (이벤트 유형용) '또는' 프랑타르제 허용합니다.

// EventListeners.get(document.body);
// EventListeners.get("click");

&lt hr>;

  • 데모 *

현재 우리가 알고 싶어 # 39 의 말하도다 let& 이 모든 이벤트 리스너에 호출이네요 우리는 그렇게 할 수 있다 (단, 이 경우, re 스크립트를 사용하여 관리자에서는 확장명은 탬퍼먼키 you& # 39). 이는 다음과 같은 스크립트입니다.

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @include      https://stackoverflow.com/*
// @grant        none
// ==/UserScript==

(function() {
    fetch("https://raw.githubusercontent.com/akinuri/js-lib/master/EventListener.js")
        .then(function (response) {
            return response.text();
        })
        .then(function (text) {
            eval(text);
            window.EventListeners = EventListeners;
        });
})(window);

하나님이 모든 리스너에 썻냐면 목록, 이벤트 리스너로 299 있습니다. 좁히어 &quot seems"; 내가 할 수 있지만, 일부 중복 don& # 39, t 다운로드되었는지 they& # 39, re 상행담관염이라고 중복. 그 모든 것은 모든 이벤트 유형은 중복됨 도왔으매 &quot duplicates"; 개별 리스너에 수 있습니다.

! [스크린샷은 콘솔입니다 리스너에 열거합니다 이 페이지의 모든 이벤트] [1]

코드 usb. 내 리포지토리를. 내가 didn& # 39, 여기에 같도다라고 it& # 39 의 대답하도다 기절해있는 게시물로의 싶지 않다.

&lt hr>;

  • 39, t 이 doesn& Update:* jQuery 작동합니까 것으로 보인다. 나는 것을 볼 때, 나는 콜백하는 에번트리스트너 검토하고 있다.

function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}

I believe 이 속한 것이 아니라, 실제 콜백하는 포함한다. jQuery 는 실제 콜백하는 특성 (properties) 의 프랑타르제:

$(document.body).click(function () {
    console.log("jquery click");
});

! [입력하십시오. 이미지 여기에 설명을] [3]

이벤트 리스너를 지루려면, 실제 콜백하는 전달될 필요가 레모비번트리스트너 () '' 메서드입니다. 이 때문에 수정할 jQuery 작동합니까 만들기 위해 필요하다. 앞으로 해결할 수도 있겠지요.

해설 (1)

프로토타입 1.7.1 운행에서어떠한

function get_element_registry(element) {
    var cache = Event.cache;
    if(element === window) return 0;
    if(typeof element._prototypeUID === 'undefined') {
        element._prototypeUID = Element.Storage.UID++;
    }
    var uid =  element._prototypeUID;           
    if(!cache[uid]) cache[uid] = {element: element};
    return cache[uid];
}
해설 (0)

나는 그렇게 할 수 있는 것, 또한, jQuery 2.1 &quot &gt () - $ (), '클릭하십시오. $ (요소), .data (events&quot ";), '&quot 클릭하십시오. # 39, 이 방법을 doesn& 빗나갔다.

저의 경우는 만 달러 () 함수를 ._data 아니라는 사실을 깨달은 작동됨.

<! - begin 스니핏: js 숨기십시오: &gt 거짓값 -;

    $(document).ready(function(){

        var node = $('body');

        // Bind 3 events to body click
        node.click(function(e) { alert('hello');  })
            .click(function(e) { alert('bye');  })
            .click(fun_1);

        // Inspect the events of body
        var events = $._data(node[0], "events").click;
        var ev1 = events[0].handler // -> function(e) { alert('hello')
        var ev2 = events[1].handler // -> function(e) { alert('bye')
        var ev3 = events[2].handler // -> function fun_1()

        $('body')
            .append('<p> Event1 = ' + eval(ev1).toString() + '</p>')
            .append('<p> Event2 = ' + eval(ev2).toString() + '</p>')
            .append('<p> Event3 = ' + eval(ev3).toString() + '</p>');        

    });

    function fun_1() {
        var txt = 'text del missatge';   
        alert(txt);
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


끝 - &lt 스니핏 >;!

해설 (0)

이러한 기능을 변경할 수 있게 로그합니다 리스너에 덧붙였다.

EventTarget.prototype.addEventListener
EventTarget.prototype.attachEvent
EventTarget.prototype.removeEventListener
EventTarget.prototype.detachEvent

나머지 리스너에 함께 읽기

console.log(someElement.onclick);
console.log(someElement.getAttribute("onclick"));
해설 (0)