jQuery는 단순히 주어진 요소에 대한 이벤트에 액세스하는 것을 허용하지 않습니다. 문서화되지 않은 내부 방법을 사용하여 액세스 할 수 있습니다
$._data(element, "events")
그러나 여전히 모든 이벤트를 제공하지는 않습니다. 정확히 지정된 이벤트는 표시하지 않습니다.
$([selector|element]).on()
이러한 이벤트는 문서 안에 저장되므로 다음을 통해 찾아 볼 수 있습니다.
$._data(document, "events")
전체 웹 페이지에 대한 이벤트가 있기 때문에 어려운 작업입니다.
위의 Tom G는 주어진 요소의 이벤트에 대해서만 문서를 필터링하고 두 메소드의 출력을 병합하는 함수를 만들었지 만 출력에서 이벤트를 복제하는 데 결함이 있습니다 (요소의 jQuery 내부 이벤트 목록에서 효과적으로 응용 프로그램을 망칠 수 있음). 그 결함을 수정했으며 아래 코드를 찾을 수 있습니다. 개발자 콘솔이나 앱 코드에 붙여 넣고 주어진 요소에 대한 모든 이벤트 목록을 얻으려면 필요할 때 실행하십시오.
주목해야 할 것은 element는 실제로 jQuery 객체가 아닌 HTMLElement입니다.
function getEvents(element) {
var elemEvents = $._data(element, "events");
var allDocEvnts = $._data(document, "events");
function equalEvents(evt1, evt2)
{
return evt1.guid === evt2.guid;
}
for(var evntType in allDocEvnts) {
if(allDocEvnts.hasOwnProperty(evntType)) {
var evts = allDocEvnts[evntType];
for(var i = 0; i < evts.length; i++) {
if($(element).is(evts[i].selector)) {
if(elemEvents == null) {
elemEvents = {};
}
if(!elemEvents.hasOwnProperty(evntType)) {
elemEvents[evntType] = [];
}
if(!elemEvents[evntType].some(function(evt) { return equalEvents(evt, evts[i]); })) {
elemEvents[evntType].push(evts[i]);
}
}
}
}
}
return elemEvents;
}