2012-01-18 11 views
6

Używam najnowszych wersji (jQuery 1.7.1 i jQuery UI 1.8.16) wszystkich bibliotek, ale przycisków, które bindowałem .live ("kliknij") wydarzenie, aby nadal strzelać, nawet gdy przycisk jest wyłączony. Kiedy wiążę zwykłe zdarzenie .click(), nie uruchamia się.jQuery .live ("kliknięcie") uruchamia się nawet przy wyłączonych przyciskach

Wszelkie sugestie? Myślę, że albo używam .live() nieprawidłowo, albo jest to błąd w interfejsie jQuery.

Oto JSFiddle do wykazania. http://jsfiddle.net/Kb66j/1/

Dzięki! Alex

+0

Twój kod wydaje się działać poprawnie w przeglądarce Firefox, ale powoduje problemy w przeglądarce Chrome i Safari. [Zostało to zgłoszone jako błąd jakiś czas temu] (http://bugs.jquery.com/ticket/8165), nie jestem pewien co do jego statusu. –

Odpowiedz

2

Od wersji 1.7, .live() has been deprecated.

"Jako jQuery 1.7, metoda .live() jest przestarzała. Użyj .on() do dołączyć obsługi zdarzeń."

Również, jak w wersji 1.7 .on() jest korzystniejszy .bind()

"Jako jQuery 1.7 Sposób .on() jest korzystną metodą mocowania obsługi zdarzeń w dokumencie".

+3

A jak to rozwiązuje problem? –

+2

Problem rozwiązany! Wymieniłem wszystkie nasłuchiwania .live() na .on() i działa świetnie. Dzięki! – jalexsmith

+0

@FelixKling, poprawnie używając jQuery. – Sparky

0

live has been deprecated

użyć nowego na() metoda zamiast

+0

Czy to rozwiąże problem? –

+0

tak, rozwiązuje problem. dzięki za upadek bez wyraźnego powodu. – cpjolicoeur

+0

Tak, awans był prawdopodobnie zbyt duży. Nie zrobiłbym tego, ale inni ludzie są bardziej rygorystyczni. –

6

to dlatego live wykorzystuje przypadku stacjonarnego. Po click na wyłączonym przycisku zdarzenie jest nadal wyświetlane, więc live aktywuje zdarzenie i wykonywane są wszystkie funkcje obsługi zdarzeń click. Możesz sprawdzić włączony stan przycisku wewnątrz programu obsługi przed wykonaniem czegokolwiek. Spróbuj tego

$("#the_button").button({ 
     icons: { 
      primary: "ui-icon-disk" 
     }, 
    disabled: true 
}).live('click',function() { 
    if($(this).is(':enabled')){ 
     alert('clicked'); 
    } 
}); 

Praca Demo

również podana przez innych live jest przestarzałe od wersji 1.7+ więc możesz spróbować skorzystać on ale kwestia ta nadal istnieje i trzeba go uchwytem sposób opisany powyżej.

+0

Właściwie problem zniknął, gdy zmieniłem wszystko na .on(). – jalexsmith

+1

@ user969352 - Działa poprawnie, ponieważ możliwe, że nie przeszedłeś metody 'selector' na' on', która jest drugim opcjonalnym arugmentem. Jeśli 'selektor' jest pominięty lub ma wartość NULL, procedura obsługi zdarzenia jest określana jako bezpośrednia lub bezpośrednio związana, co nie miało miejsca w przypadku' live', które działa wyłącznie na mechanizmie propagacji zdarzeń, gdy dołącza procedurę obsługi zdarzeń na poziomie 'dokumentu' . – ShankarSangoli

+0

Nie jestem już pewien, czy przyczyna podania jest prawidłowa. Najwyraźniej ten problem istnieje tylko w Chrome i Safari (nie wiem o Operze). –

Powiązane problemy