Как вы программно определяете, какие события может прослушивать объект HTML?

#javascript #dom #safari #webkit #gecko

#javascript #dom #safari #webkit #гекко

Вопрос:

Я просматривал документы по адресу developer.mozilla.org и документы Apple dev docs, но я не могу найти документацию, которая объясняет, можете ли вы программно определить, поддерживает ли конкретный HTML-тег данный EventListener.

Например, я знаю, что <script> тег не будет поддерживать прослушиватель кликов, поскольку нажимать не на что, но откуда я это знаю?

Или, за исключением этого, есть ли где-нибудь простая ссылка на то, какие события поддерживает каждый тег?

Ответ №1:

За исключением нескольких крайних случаев, да, вы можете, согласно Perfection Kills:

Хитрость заключается в том, что многие современные браузеры сообщают о свойстве, соответствующем имени события, как существующем в элементе.

В основном код выглядит так:

 'onclick' in document.documentElement; // true
'onclick2' in document.documentElement; // false
  

Он использует его для обнаружения поддержки событий в различных браузерах, но его также можно использовать для определения того, поддерживает ли элемент событие:

Событие должно быть проверено на элементе, который действительно может вызвать это событие.

Таким образом, вы также получаете такие результаты:

 'onreset' in document.documentElement; // false
'onreset' in document.createElement('input'); // true
  

Комментарии:

1. Возможно, это не будет делать именно то, что вы хотите, поскольку 'onclick' in document.createElement('script') возвращает true . Но это просто означает, что если вы дадите <script> некоторую display:block и другую магию CSS, вы можете предоставить ему прослушиватель щелчков. Этот метод сообщает, что браузер может технически поддерживать; возможно, вам потребуется немного отфильтровать его результаты, чтобы заставить его работать так, как вы хотите.

Ответ №2:

я говорю вам прочитать это

… и лучшее, что вы должны думать, это то, что события предназначены только для объектов DOM . Тогда все объекты в DOM могут иметь события (но читать список).