2009-09-17 13 views
6

Mam problem Używam kart jquery U.I, które ładują wszystko za pomocą ajax. Teraz mam go teraz za każdym razem, gdy klikniesz na kartę, widok częściowy jest załadowany do tej karty.Czy jquery działa na wolnych stronach internetowych?

Teraz w tym częściowym widoku są to pliki javascript, które używają jquery do wiązania wszystkich zdarzeń, które są potrzebne na tej karcie oraz niektórych wtyczek jquery, których używam.

Za każdym razem, gdy karta jest załadowana, wszystkie te skrypty są załadowane. Jeśli kliknięto go 10 razy, to te skrypty są ładowane 10 razy, teraz każde z nich mówi, że moje przyciski będą miały teraz 10 takich samych zdarzeń, to znaczy, że jeśli ktoś kliknie na ten przycisk, wszystkie zdarzenia będą się uruchamiać i robić to samo.

Potrzebuję więc znaleźć rozwiązanie, które pozwoli przenieść cały skrypt i umieścić go na stronie głównej i użyć jquery.live lub innego rozwiązania.

Próbowałem użyć buforowania jquery dla zakładek UI, ale to nie zadziała, ponieważ niektóre rzeczy mówią Tab A, kiedy zmieniono efekt Tab B, co oznacza, że ​​potrzebuję Tab B do ponownego załadowania, ale skrypty nie mogą przeładować inaczej napotkasz ten sam problem, co teraz.

Odpowiedz

6

Read here za przyjemną prezentację obejmującą delegowanie wydarzeń jQuery.

Po przeczytaniu powyższego spojrzeć na to:

// using jQuery 1.4.2 
(function($){ 
    // You can cache the container you plan on using for event delegation. 
    // If using $(document).ready(...) to call the below functions 
    //  your "container" element should already exist in the DOM 
    // (the .specialAjaxLink elements don't have to exist yet). 
    var container = $("#container"); 

    // whenever an element with the class "specialAjaxLink" is clicked 
    // while inside your container element execute the handler on them. 
    container.delegate(".specialAjaxLink", "click", function(){ 
     // do something amazing... 
     solveWorldHunger(this); 
     // stop propagation and prevent default... 
     return false; 
    }); 
}(jQuery)); 

nie powinna martwić się o problemy z wydajnością przy użyciu powyższej metody, chyba że tworzysz aplikację tak skomplikowany jak Gmail, Dokumenty lub Google Wave .

2

zawsze, co do zasady, zadzwoń unbind() przed bind()

+0

Nie śledzę? czy mogę zobaczyć kilka przykładów? Jak to działa z wtyczkami? Czy to szybkie czy wolniejsze, aby to zrobić, a następnie "żyć"? – chobo2

+0

Czy jest tam też tylko po to, aby wszystko rozwiązać? – chobo2

+0

wywoływanie funkcji unbind() przed usunięciem() i bind() to dobry sposób na uniknięcie wielu powiązań tego samego elementu. Wolę live(), jeśli coś jest tworzone i często usuwane (np. Animowany efekt na przycisku) – Mike

0

Zamiast .live(), należy rozważyć użycie zamiast delegacji zdarzeń. Wysłuchaj zdarzenia wewnątrz kontenera, a następnie sprawdź tag i atrybuty, aby zdecydować, jak sobie z tym poradzić.

O wiele bardziej wydajne, jeśli dodajesz kilka elementów do DOM.

+0

Będę potrzebował kilku przykładów, ponieważ nie podążam. – chobo2

+0

Oto szybki link - przewiń w dół http://www.learningjquery.com/2008/03/working-with-events-part-1 – ScottE

+0

Nie jestem pewien, na co powinienem patrzeć. – chobo2

Powiązane problemy