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>
Для выбора всех параметров можно использовать строку
$('input:not(:checked)').prop('checked', true);
Но в этом случае не запустится обработчик, проверяющий заполненность формы.