Несколько функций в одном элементе и событии

#javascript #jquery #dom

#javascript #jquery #dom

Вопрос:

Что именно произойдет, если я добавлю несколько функций в одном элементе к одному и тому же событию?

На примере:

 jQuery('#searchButton').click(function(){ /* logic 1 */ );
jQuery('#searchButton').click(function(){ /* logic 2 */ );
  
  1. всегда первая функция, добавленная к событию, будет вызываться первой?
  2. все браузеры поддерживают такие вещи?
  3. функции вызываются асинхронно?

Спасибо

Ответ №1:

Просто чтобы указать на то, чего еще нет в других ответах: jQuery действительно гарантирует, что события будут запускаться в том порядке, в котором они были добавлены (как указано в ответе Джона Хартсока), путем привязки только одного обработчика событий к любому заданному элементу и удержания внутреннего массива связанных функций (которыеимеет дополнительное преимущество в возможности удаления анонимных функций, на которые в противном случае у вас не было бы ссылки). Тогда это справедливо для всех браузеров.

Однако, если вы смешиваете это с любой другой библиотекой или используете DOM напрямую, никаких гарантий нет. Стандарт не требует, чтобы реализации следовали какому-либо порядку, поэтому, хотя многие реализуют структуру FIFO внутри, это не гарантируется. Соответствующий раздел стандарта.

Ответ №2:

Всегда первая функция, привязанная к событию elements, будет вызываться первой?

Цитата из документов jQuery

Если зарегистрировано несколько обработчиков, они всегда будут выполняться в том порядке, в котором они были связаны.

Ссылка

http://api.jquery.com/bind/

Ответ №3:

Они выполняются в том порядке, в котором они были связаны. Вот выдержка из книги быстрого запуска jquery:

http://www.peachpit.com/articles/article.aspx?p=1371947amp;seqNum=3