trigger()

Метод trigger() используется для запуска событий. С его помощью можно запустить как стандартные (браузерные), так и нестандартные (пользовательские) события. Обработчики событий и действия браузера по умолчанию выполняются в той последовательности, как если бы событие было запущено браузером. При этом события всплывают по DOM-дереву.

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

Для запуска некоторых событий можно воспользоваться укороченной формой записи. Для этого используются одноимённые событиям методы: blur(), focus(), focusin(), focusout(), resize(), scroll(), click(), dblclick(), mousedown(), mouseup(), mousemove(), mouseover(), mouseout(), mouseenter(), mouseleave(), change(), select(), submit(), keydown(), keypress(), keyup(), contextmenu(). Например:

jQ_object.submit() => jQuery

Варианты использования

jQ_object.trigger(имя_события[, данные]) => jQuery
Для каждого элемента выборки запускает событие указанного типа. Вторым аргументом можно указать данные для передачи в обработчики события (см. ниже).
jQ_object.trigger(объект_события[, данные]) => jQuery
Для каждого элемента выборки запускает событие, соответствующее переданному объекту события. Вторым аргументом можно указать данные для передачи в обработчики события (см. ниже).

Во время запуска trigger() имеется возможность передать в обработчик дополнительные данные. Эти данные записываются в указанные при установке обработчика аргументы, начиная со второго (так как в первый аргумент передаётся объект события). Например, если установлен обработчик:

jQ_object.on('submit', function (event, data_1, data_2) {...});

Тогда при запуске trigger() с дополнительными данными в переменные data_1 и data_2 будут записаны первые два из переданных значений. Сами значения передаются в виде нумерованного массива, например:

jQ_object.trigger('submit', [data_1, data_2]);

Если передаётся один параметр (строка, число или объект), тогда его не обязательно заключать в массив:

jQ_object.trigger('submit', {prop: val});

Передать данные в обработчик можно не только при его запуске, но и при установке с помощью метода on(). Однако, в этом случае необходимые данные должны быть известны на момент установки обработчика и впоследствии их нельзя будет изменить.

Примеры

<html>
<head>
  <title>Работа с событиями в jQuery</title>
  <script type="text/javascript" src="js/jquery.js"></script>
</head>
<body>
  <form autocomplete="off" onsubmit="return false">
    <p><button>Выбрать всё</button></p>
    <p>Параметр 1: <input type="checkbox"></p>
    <p>Параметр 2: <input type="checkbox"></p>
    <p>Параметр 3: <input type="checkbox"></p>
    <p><button disabled>Отправить</button></p>
  </form>
</body>
</html>
 
<script>
function checkForm() {
  if ($('input:not(:checked)').length == 0) {
    $('button:last').removeAttr('disabled');
  } else {
    $('button:last').attr('disabled', '');
  }
}

/* При каждом изменении в полях input запускается обработчик, проверяющий заполненность формы */
$('input').on('change', checkForm);

/* Для выбора всех параметров запускается событие click у невыбранных флажков */
$('button:first').on('click', function() {
  $('input:not(:checked)').trigger('click');
});
</script>

Параметр 1:

Параметр 2:

Параметр 3:

Для выбора всех параметров можно использовать строку

$('input:not(:checked)').prop('checked', true);

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