2012-06-25 14 views
39

mam kliknij zdarzenia skonfigurowane tak:return false z jQuery kliknij zdarzenie

$('.dialogLink') 
    .click(function() { 
     dialog(this); 
     return false; 
    }); 

all mieć „return false”

Może ktoś wytłumaczyć co to robi, a jeśli jest to potrzebne?

Odpowiedz

75

Po przywróceniu z procedury obsługi zdarzeń zapobiega domyślnej akcji dla tego zdarzenia i zatrzymuje przepełnienie zdarzenia przez DOM. Oznacza to, że jest odpowiednikiem ten sposób:

$('.dialogLink') 
    .click(function (event) { 
     dialog(this); 
     event.preventDefault(); 
     event.stopPropagation(); 
}); 

Jeśli '.dialogLink' jest <a> elementem następnie jego domyślne działanie na kliknięcie jest, aby przejść do href. Zwrócenie numeru false z obsługi kliknięcia zapobiega temu.

Jeśli chodzi o to, czy jest to potrzebne w twoim przypadku, odgadłbym, że odpowiedź brzmi "tak", ponieważ chcesz wyświetlić okno dialogowe zamiast kliknięcia, a nie nawigację. Jeśli element, w którym umieściliśmy obsługę kliknięć, nie ma domyślnej akcji kliknięcia (np. Normalnie nic nie dzieje się po kliknięciu elementu div), to nie trzeba zwracać fałszu, ponieważ nie ma nic do anulowania.

Jeśli chcesz zrobić coś w odpowiedzi na kliknięcie, ale niech domyślna nawigacja będzie kontynuowana, nie zwracaj wartości false.

Dalsze czytanie:

+0

Czy to było tak samo, gdy zakodowałem w tych dwóch zdarzeniach funkcję okna dialogowego? – Alan2

+1

Te dwie linie nie są zdarzeniami, są to wywołania metod obiektu 'event', które zauważysz dodałem jako parametr do funkcji. jQuery ustawia ten parametr na obiekt 'event' powiązany z dowolnym zdarzeniem.Jeśli przekazałeś obiekt 'event' do funkcji' dialog() ', mógłbyś wywołać te metody, ale myślę, że jest to o wiele łatwiejsze do utrzymania, jeśli zrobisz to bezpośrednio tam, gdzie je pokazałem. Powiedziawszy to, polecam trzymać się "zwrotu fałszywego", które już masz: jest krótsze. – nnnnnn

+0

Jako ktoś, kto wpadł na ten problem i trochę się zorientował, co się dzieje, argumentowałbym, że wywołanie 'return false' nie jest tak jasne, jak powiedzenie preventDefault i stopPropagation. – aug

3

Wartość zwracana obsługi zdarzeń określa, czy zachowanie domyślne przeglądarka powinna mieć miejsce również. W przypadku kliknięcia linków będzie to link, ale różnica jest najbardziej zauważalna w formularzach obsługi zgłoszeń, w których można anulować przesyłanie formularzy, jeśli użytkownik popełnił błąd wprowadzając informacje.

Nie sądzę, że istnieje specyfikacja W3C. Wszystkie starożytne interfejsy JavaScript mają nadane przydomek "DOM 0" i są w większości nieokreślone. Możesz mieć trochę szczęścia czytając starą dokumentację Netscape 2.

Współczesnym sposobem osiągnięcia tego efektu jest wywołanie event.preventDefault(), co zostało określone w DOM 2 Events specification.

Dlatego właściwym sposobem byłoby:

$('.dialogLink') 
    .click(function (e) { 
     dialog(this); 
     e.preventDefault(); 
     e.stopPropagation(); // Stop bubbling up 
}); 
+0

Wspominałeś o "nowoczesnym" sposobie, ale jeśli jest tak samo, nie lepiej jest kodować zwrot false i zapisać kilka bajtów ze skryptu :-) – Alan2

+0

Jeśli jest to obsługa zdarzeń jQuery, możesz być pewien, że 'return false' wykonuj pracę. – nnnnnn

+0

Uzgodniono z @nnnnnn. –

0

Wartość zwracana obsługi zdarzeń określa, czy zachowanie domyślne przeglądarka powinna mieć miejsce również. W przypadku kliknięcia linków będzie to link, ale różnica jest najbardziej zauważalna w formularzach obsługi zgłoszeń, w których można anulować przesyłanie formularzy, jeśli użytkownik popełnił błąd wprowadzając informacje.

Powiązane problemy