2015-12-23 2 views
0

У меня есть веб-ui с классом, который действует как посредник между несколькими возможными событиями и несколькими возможными слушателями, а не только одним. Объект-посредник регистрирует свою специальную функцию в событии как обычный прослушиватель, который затем может перебирать все возможные слушатели. Если на событии уже зарегистрирован слушатель до того, как медиатор запустил его, он будет помещен в внутренние списки объектов посредника, подобный другим слушателям регистра, заставляя его вызываться на любом зарегистрированном событии.Как получить доступ к названию активированного события из функции слушателя?

Поскольку объект-посредник принимает всех предыдущих слушателей, если есть какое-либо событие для данного события, он будет вызывать их всех. Это происходит, даже если это не оригинальное событие, которое срабатывает, но одно из других нескольких событий с зарегистрировано и на объекте посредника.

Чтобы предотвратить это, Мне нужно знать событие, из-за которого его слушатель (ы) вызывается. Например. когда window.onclick пожаров, я хочу знать, что это window.onclick. То, что у меня до сих пор, является объектом, из которого происходит событие (через это ключевое слово), которое в этом конкретном случае составляет window. Как я могу получить доступ к этой информации и это можно сделать в виде кросс-браузера?

Для того, чтобы проиллюстрировать, как это зловещее посредник «класс», называемый также CallbackHandler, фактически используется:

// potential listener-functions 
var callMeBaby = function() { console.log("Ya called me, Baby!"); }; 
var callMeWilhelm = function() { console.log("Ya called me, Wilhelm!"); }; 
var callMeMaybe = function() { console.log("Ya called me, maybe..."); }; 

// first listener assigned 
window.onclick = callMeBaby; 

// create 2 CallbackHandler-objects 
// they use the same event window.onclick 
// myButton.onclick is registered on anotherCH exlusively 
// the previous listener window.onclick = callMeBaby will be included in windowOnClickCH 
// windowOnClickCH.callback (the new listener) will replaced by anotherCH.callback as well 
var windowOnClickCH = new Utilities.CallbackHandler(); 
windowOnClickCH.addSender(window, "onclick"); 
var anotherCH = new Utilities.CallbackHandler(); 
anotherCH.addSender(window, "onclick"); 
anotherCH.addSender(document.getElementById("myButton"), "onclick"); 

// register callback-function on the CallbackHandler-objects 
windowOnClickCH.addReceiver(callMeWilhelm); 
anotherCH.addReceiver(callMeMaybe); 

Это приведет к более менее этих консольных журналов:

Ya called me, Baby! 
Ya called me, Wilhelm! 
Ya called me, maybe... 

Спасибо заранее!

+0

Будет ли цель мероприятия работать? 'var callMeMaybe = function (event) {console.log (« Я позвонил мне, может быть ... »); console.log (event.target); }; 'Возможно, вам придется добавить объект события где-то в медиа-посреднике, но, таким образом, он будет передан функции. – Shilly

+0

@Shilly Event.target не будет делать, к сожалению. По-прежнему приятно знать, где пользователь нажал на пример onclick, но он не сообщает посреднику, ака '' CallbackHandler', что ему нужно. –

+0

Mh, сам объект события имеет тип, доступ к которому осуществляется через, например, '' eventObj.type''. Для стандартных-onlick-событий это становится '' "click" ''. Является ли этот тип события уникальным для каждого элемента dom? Когда есть '' myObject.onclick'' с типом события '' click'', возможно ли это, например. '' myObject.onClickfest'' с тем же типом события? –

ответ

0

Вы хотите использовать свойство currentTarget объекта события. «Event.currentTarget идентифицирует текущую цель для события, поскольку событие пересекает DOM. Оно всегда относится к элементу, к которому привязан обработчик событий».
Смотрите эту ссылку для получения более подробной информации: https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget

+0

Когда я печатаю его на консоли, '' currentTarget'' '' window'' в этом примере. Я получил доступ к одному и тому же объекту через '' this'' в коде функции-слушателя. То, к чему я действительно стремлюсь, это '' window.onclick'' или что-то, что позволяет мне обращаться к нему без всякого сомнения. –

+0

Флориан, когда вызывается функция слушателя, передается объект события. Одним из атрибутов объекта события является Event.type, в котором указано, какое событие было уволено. Это подробно описано на этом URL-адресе: http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-Event-type. В разделе 1.6.2 указаны значения, которые возвращаются из события мыши, одним из которых является «щелчок». –

Смежные вопросы