С помощью делегирования событий в jQuery 1.6 вы можете отвечать на события, которые перешли к общему родителю.
Пример реализации выглядит следующим образом:
(function($){
$.fn.myeventhandler = function () {
return this.delegate('a.next, a.prev', 'click customEvent', function (event) {
var target=$(event.target);
var bar = null;
if('click' == event.type) { /*~[ call this 'a' ]~*/
// handle the click event
$('#next-element').animate({width:'200px'},1300,function(){
bar = 'value1';
$('#next-element').animate({width:'100px'},1300,function(){
bar = 'value2';
console.log(bar);
});
});
} else if('customEvent' == event.type) { /*~[ call this 'b' ]~*/
// handle the customEvent event
$('#my-element').animate({height:'200px'},1300,function(){
bar = 'my-event1';
console.log(bar);
});
}
return false;
});
}
})(jQuery);
Такая структура может действительно хорошо работать, когда у вас есть много триггеров событий, которые вы хотите привязать к странице. Тем не менее, я заметил любопытное поведение и подумал, может ли кто-нибудь просветить меня по поводу следующего:
Если вы определяете переменную 'var bar;
' перед 'a' и используете ее в 'a', а выполнение 'a' занимает много времени, тогда, если 'щелчок' будет вызван во второй раз, будет ли 'bar 'переменная будет переназначена значение или будет создано новое?
Причина вопроса в том, что у меня есть «незаконченная» анимация, в которой анимация занимает 1,3 секунды. Если я инициирую два последовательных события щелчка, цель и тип будут правильно установлены, но вторая анимация, по-видимому, влияет на первую, и две области видимости будут доступны друг другу.
Я еще не закончил анимацию, поэтому у меня нет рабочего набора для размещения в сети в jsFiddle, но есть ли здесь эмпирическое правило, которое я должен изучить, или какое-то более ясное объяснение области, доступной кому-либо возможно нашел?
EDIT:
Выше я добавил в ситуации, аналогичной той, что я использую. В приведенном выше упрощенном случае значение 'bar' все еще содержит ожидаемое значение при 2 последовательных вызовах, но в более сложном случае я работаю (все еще), если только я не передам параметры в функцию обратного вызова специально, все еще есть условие, позволяющее 2 последовательным вызовам изменить значение параметра таким образом, чтобы обратный вызов видел значение, созданное последующим вызовом, а не значение, которое было логически установлено в его собственном инициированном вызове. Если кто-то может повторить этот эффект на упрощенном примере, я был бы признателен. Я сокращаю свои функции, чтобы попытаться создать jsFiddle, который копирует его.
Спасибо,
AE