#javascript #jquery #dom
#javascript #jquery #dom
Вопрос:
Что именно произойдет, если я добавлю несколько функций в одном элементе к одному и тому же событию?
На примере:
jQuery('#searchButton').click(function(){ /* logic 1 */ );
jQuery('#searchButton').click(function(){ /* logic 2 */ );
- всегда первая функция, добавленная к событию, будет вызываться первой?
- все браузеры поддерживают такие вещи?
- функции вызываются асинхронно?
Спасибо
Ответ №1:
Просто чтобы указать на то, чего еще нет в других ответах: jQuery действительно гарантирует, что события будут запускаться в том порядке, в котором они были добавлены (как указано в ответе Джона Хартсока), путем привязки только одного обработчика событий к любому заданному элементу и удержания внутреннего массива связанных функций (которыеимеет дополнительное преимущество в возможности удаления анонимных функций, на которые в противном случае у вас не было бы ссылки). Тогда это справедливо для всех браузеров.
Однако, если вы смешиваете это с любой другой библиотекой или используете DOM напрямую, никаких гарантий нет. Стандарт не требует, чтобы реализации следовали какому-либо порядку, поэтому, хотя многие реализуют структуру FIFO внутри, это не гарантируется. Соответствующий раздел стандарта.
Ответ №2:
Всегда первая функция, привязанная к событию elements, будет вызываться первой?
Цитата из документов jQuery
Если зарегистрировано несколько обработчиков, они всегда будут выполняться в том порядке, в котором они были связаны.
Ссылка
Ответ №3:
Они выполняются в том порядке, в котором они были связаны. Вот выдержка из книги быстрого запуска jquery:
http://www.peachpit.com/articles/article.aspx?p=1371947amp;seqNum=3