triggerHandler()
Метод triggerHandler()
используется для запуска всех обработчиков указанного события. Метод выполняет не только установленные с помощью jQuery обработчики, но и установленные с помощью HTML-атрибутов или DOM-свойств.
Если требуется запустить событие, а не только установленные обработчики, тогда следует воспользоваться методом trigger()
. Основные отличия метода triggerHandler()
от trigger()
:
- Метод
triggerHandler()
не запускает событие, то есть действия браузера по умолчанию не будут выполняться. - Метод
triggerHandler()
срабатывает только для первого элемента текущей выборки. - Событие, указанное в
triggerHandler()
, не всплывает по DOM-дереву, так как событие не генерируется. Следовательно, делегированные обработчики не выполняются. - Метод
triggerHandler()
возвращает значение, полученное из последнего запущенного обработчика. Если ни один обработчик не запущен, метод возвращаетundefined
.
Варианты использования
jQ_object.triggerHandler(имя_события[, данные]) => JavaScript
- Для первого элемента выборки запускает обработчики указанного события. Вторым аргументом можно указать данные для передачи в обработчики события (см. ниже).
jQ_object.triggerHandler(объект_события[, данные]) => JavaScript
- Для первого элемента выборки запускает обработчики указанного события (тип события определяется по переданному объекту события). Вторым аргументом можно указать данные для передачи в обработчики события (см. ниже).
Во время запуска triggerHandler()
имеется возможность передать в обработчик дополнительные данные. Эти данные записываются в указанные при установке обработчика аргументы, начиная со второго (так как в первый аргумент передаётся объект события). Например, если установлен обработчик:
jQ_object.on('submit', function (event, data_1, data_2) {...});
Тогда при запуске triggerHandler()
с дополнительными данными в переменные data_1
и data_2
будут записаны первые два из переданных значений. Сами значения передаются в виде нумерованного массива, например:
jQ_object.triggerHandler('submit', [data_1, data_2]);
Если передаётся один параметр (строка, число или объект), тогда его не обязательно заключать в массив:
jQ_object.triggerHandler('submit', {prop: val});
Передать данные в обработчик можно не только при его запуске, но и при установке с помощью метода on()
. Однако, в этом случае необходимые данные должны быть известны на момент установки обработчика и впоследствии их нельзя будет изменить.
Примеры
<html> <head> <title>Работа с событиями в jQuery</title> <script type="text/javascript" src="js/jquery.js"></script> </head> <body> <form autocomplete="off"> <p>Параметр 1: <input type="checkbox"></p> <p>Параметр 2: <input type="checkbox"></p> <p>Параметр 3: <input type="checkbox"></p> <p><input type="submit" value="Отправить"></p> </form> <div hidden><strong>Выбраны не все параметры.</strong></div> </body> </html> <script> /* Перед отправкой проверяется заполненность формы */ $('form').on('submit', function() { if ($('input:checkbox:not(:checked)').length == 0) { $('div').hide(); } else { $('div').show(); return false; } }); /* При каждом изменении параметров имитируется событие submit для формы */ $('input:checkbox').on('change', function() { $('form').triggerHandler('submit'); }); </script>