Создание событий JavaScript с индивидуально прикрепленными данными - PullRequest
11 голосов
/ 31 января 2012

Есть ли способ JavaScript для передачи пользовательских данных в событие JavaScript, созданное вручную?

Хорошо, допустим, я получил этот код для создания и запуска события JavaScript:

var evObj = document.createEvent('HTMLEvents');
evObj.initEvent('submit', bubbling, cancelable);
anElement.dispatchEvent(evObj);

Это прекрасно работает и может быть обработано с помощью этого кода:

document.addEventListener('submit', mySubmitEventHandler, true);

Но мне нужен способ передать дополнительные данные событию, чтобы mySubmitEventHandler знал, было ли событие инициировано пользователем или созданием события JavaScript, как показано выше. Было бы достаточно логического значения.

Итак, как я могу добавить что-то вроде "myEvent = true" для вновь созданного evObj?

И, пожалуйста, не отвечайте на jQuery, мне нужно сделать это на чистом JavaScript.

Ответы [ 2 ]

21 голосов
/ 31 января 2012

Присоедините параметр к evObj.

evObj.flag = 'Hi!';
anElement.dispatchEvent(evObj);

Этот код демонстрирует, что объект события, переданный dispatchEvent, равен объекту в прослушивателе событий ( Live demo ):

var evObj = document.createEvent('HTMLEvents');
document.body.addEventListener('test', function(e){ alert(e === evObj); },true);
evObj.initEvent('test', true, true);
document.body.dispatchEvent(evObj); // Shows alert, "true"
6 голосов
/ 31 января 2012

ваш evObj это обычный объект, вы можете добавить любые данные в качестве свойства объекта, например evObj.myData = "blablabla";и затем прочитайте данные в слушателе

Надеюсь, это поможет

...