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);
Но в этом случае не запустится обработчик, проверяющий заполненность формы.