Как обнаружить событие клавиатуры уже связано? - PullRequest
0 голосов
/ 15 декабря 2011

Я создаю расширение Chrome, используя ключевое событие пользователя.Но я хочу предупредить пользователя, если элемент уже был связан с событием клавиатуры.

Как определить, что событие клавиши уже связано?

1 Ответ

2 голосов
/ 15 декабря 2011

Это сложно.Реальность такова, что вы можете связать событие HTMLElement разными способами.Я полагаю, что самый простой способ связать (и проверить, если что-то связано) будет что-то вроде этого:обнаруживать события, добавленные addEventListener или attachEvent с программным javascript, если у вас нет возможности изменить прототип для элементов HTML до того, как события будут связаны.(Таким образом, пользовательский скрипт не может реально изменить прототипы до того, как будут связаны события, потому что он запускается после того, как все сценарии на странице включены).Однако, если это ваша собственная страница, и вы просто хотите отслеживать эти изменения событий.Вы можете взломать его в прототип, выполнив что-то вроде этого:

// cache the original event handler
HTMLAnchorElement.prototype.realAddEventListener = HTMLAnchorElement.prototype.addEventListener;

// now override it so you can add in your custom functionality
HTMLAnchorElement.prototype.addEventListener = function(a,b,c){
    this.realAddEventListener(a,b,c); 
    // do whatever you want to cache those listening functions, maybe shove them in an array
    // for the current object
    if (!this.listeners) {  
        this.listeners = new Array();
    }
    this.listeners.push({a : a, b : b , c : c});
};

// code here that adds an event handler
document.getElementById("txtField").addEventListener("keydown", function() {
  console.log("key down pressed"); 
});

// find the event listeners that are bound
var listeners = document.getElementById("pressed").listeners;

Глядя, я нашел этот вопрос здесь, который также охватывает именно эту проблему, и некоторые хорошие ответы там идут на большую глубину:1007 * Как найти прослушиватели событий на узле DOM при отладке или из кода JavaScript?

...