2012-02-09 3 views
2

У меня есть свой объект с функцией onShow(), который называется (мной), когда объект показан. Я могу переопределить эту функцию назначениемКак добавить дополнительный обработчик событий в jQuery или простой javascript?

o.onShow = function() { // something }; 

Но он удаляет предыдущую версию функции. Так что, если я хочу, чтобы сохранить существующий обработчик, я должен кэшировать и вызвать новый обработчик:

o.oldOnShow = o.onShow; 
o.onShow = function() { this.oldOnShow(); // something }; 

Но этот путь я могу кэшировать только один предыдущий обработчик. Что, если их много?

Есть ли удобный способ выполнить эту задачу? Как эта задача называется в литературе? Есть ли методы для этого в jQuery?

ответ

4

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

$(o).trigger('my-awesome-event'); 

Тогда можно определить один или несколько слушателей, используя либо .bind() или (если вы используете JQuery 1.7+) .on():

$(o).on('my-awesome-event', function(event){ ... }); 
+0

Является ли это применимым к любому объекту javascript только для наборов jquery? – Dims

+0

@Dims: см. Http://www.mrspeaker.net/2009/10/28/using-jquery-on-javascript-objects/. – rsenna

2

Вы можете использовать метод связывания JQuery в:

$(o).bind("show", function() {}); 

Это добавляет обработчик событий в список обработчиков событий, не перезаписывает существующие обработчики. Here are the docs

+0

Как можно проще! –

5

В JQuery вы можете добавить столько обработчиков, как вам нравится:

$(o).on('show', function() { ... }); 

Последующие вызовы не будут удалены ранее связанных обработчиков.

+0

Обратите внимание, что для jQuery для метода требуется jQuery 1.7+ –

1

Прикрепление обработчика события через jQuery не будет конфликтовать с другими событиями, пока обработчик события не останавливает событие от распространения.

Если вы хотели бы сделать это в родной JavaScript, вам нужно использовать конкатенацию:

o.onShow = o.onShow + "function() { // something };" 
+0

Wow! Разве это не медленнее, чем hardcoding? – Dims

+0

Я не уверен, что вы подразумеваете под hardcoding ... string concatenating обработчики событий - это, конечно же, не желаемое решение - желательно было бы использовать обработчики через jQuery. – jbabey

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