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>

Параметр 1:

Параметр 2:

Параметр 3: