суббота, 25 марта 2017 г.

Отличия trigger() и triggerHandler() в jQuery

Эти методы позволяют запускать обработчики определенных событий, привязанных к соответствующим элементам. Рассмотрим, чем они отличаются.

.triggerHandler( 'event' ) не вызывает .event() на элементе, .trigger( 'event' ) — вызывает

<input type="text"> <script> $(function() { $( "input" ).focus(function() { console.log('focus'); }); $( "input" ).trigger( "focus" ); // "focus" в консоли, текстовое поле получит фокус $( "input" ).triggerHandler( "focus" ); // "focus" в консоли, но текстовое поле не получит фокус }) </script>

.triggerHandler() обрабатывает только первый соответствующий элемент, trigger() — все элементы

<button id="button1">button1</button> <button id="button2">button2</button> <script> $("#button1").click(function(){ console.log('button 1'); }); $("#button2").click(function(){ console.log('button 2'); }); $("#button1, #button2").triggerHandler("click"); // "button 1" в консоли $("#button1, #button2").trigger("click"); // "button 1", "button 2" в консоли </script>

События, генерируемые .triggerHandler() не всплывают выше по иерархии DOM, генерируемые .trigger() — всплывают

<div id="outer"> <div id="inner"></div> </div> <script> $(function() { $("#outer").click(function(){ console.log('outer click'); }); $("#inner").click(function(){ console.log('inner click'); }); $("#inner").trigger('click'); // "inner click", "outer click" в консоли $("#inner").triggerHandler('click'); // "inner click" в консоли }); </script>

.triggerHandler() возвращает значение из последнего обработчика, или undefined, .trigger() возвращает jQuery объект

<button id="button">Button</button> <script> $(function() { $("#button").click(function(){ return 5; }); var result = $("#button").trigger('click'); result.css('color', 'green'); // изменить цвет кнопки var result = $("#button").triggerHandler('click'); console.log(result); // 5 }); </script>

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

Отправить комментарий