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>