Dzięki delegowaniu wydarzeń w jQuery 1.6 możesz odpowiadać na zdarzenia, które przepuściły wspólny rodzic.Zmienna zakres delegacji zdarzeń jquery z kolejnymi połączeniami
Implementacja próbka jest tak:
(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);
Ten rodzaj konstrukcji może pracować bardzo dobrze, gdy masz wiele zdarzenie wyzwala chcesz związały na stronie. Zauważyłem jednak dziwne zachowanie i zastanawiałem się, czy ktoś mógłby mnie oświecić w zakresie:
Jeśli zdefiniujesz zmienną "var bar;
" przed "a" i użyjesz go w "a" i "a" wykonanie zajmuje wiele czasu, a jeśli "kliknięcie" zostanie wywołane po raz drugi, czy zmienna "słupkowa" zostanie ponownie przypisana do wartości, czy też zostanie utworzona nowa?
Powodem pytania jest to, że mam "niedokończoną" animację, w której wykonanie animacji trwa 1,3 sekundy. Jeśli uruchomię dwa kolejne zdarzenia kliknięcia, cel i typ są poprawnie ustawione, ale druga animacja wydaje się wpływać na pierwszą, a dwa zakresy wydają się dostępne dla siebie.
Jeszcze nie skończyłem animacji, więc nie mam działającego zestawu do umieszczenia w Internecie w jsFiddle, ale czy istnieje jakaś zasada dotycząca zakresu, który powinienem zbadać lub wyjaśnić nieco zakres dostępny ktoś mógł znaleźć?
EDIT: W powyższym Dodałem w podobnej sytuacji co ja używam. W powyższym uproszczonym przypadku wartość "bar" nadal zawiera oczekiwaną wartość dla dwóch kolejnych połączeń, ale w bardziej skomplikowanym przypadku pracuję (nadal), chyba że przekażę parametry do funkcji zwrotnej, warunek, który pozwala na 2 kolejne wywołania, aby zmienić wartość parametru tak, aby wywołanie zwrotne widziało wartość utworzoną przez kolejne wywołanie - nie wartość, która została logicznie ustawiona w jego własnym wyzwalanym wywołaniu. Jeśli ktokolwiek może powtórzyć ten efekt na uproszczonym przykładzie, byłbym wdzięczny. Ograniczam swoje funkcje, aby wypróbować jsFiddle, który je replikuje.
Dzięki AE
Co to jest "a"? ? ? –
Witaj, Interstellar_Coder, "a" w komentarzach odnosi się do pierwszego bloku kodu if(), a "b" do bloku kodu "else" - przepraszam, jeśli komentarze były niepomocne - co jest dobrym przykładem do zilustrowania go lepiej ? – MyStream