2012-06-10 19 views
8

widzę wiele osób sprawdzić, czy istnieje element DOM przed przypisaniem zdarzenie, na przykład (coffeescript):Czy powinniśmy sprawdzić, czy element istnieje przed przypisaniem zdarzeń?

$ -> 
    if($("#progressbar").length > 0) 
     $("#progressbar").progressbar(value: 0) 

Czy to konieczne? Jeśli mimo wszystko dodamy zdarzenie, niezależnie od tego, czy element istnieje, czy istnieje trafienie wydajności?

+2

Czy jQuery? –

+0

Myślę, że najpierw dostaniesz błąd, nie? – thescientist

+0

Jest konwertowany z Coffeescript na prosty javascript. Domyślam się, że błąd nie pojawia się, ponieważ to zdarzenie zostało załadowane bez interakcji użytkownika (patrz odpowiedź gabrielhilal poniżej). –

Odpowiedz

12

Każde wywołanie metody w jQuery jest zapakowane w funkcję .each, więc sprawdzenie, czy dany element istnieje, zwykle nie jest konieczne - nie będzie żadnych iteracji wywoływanej funkcji, jeśli zestaw jest pusty, nie działa po cichu. Podany przykład jest tego dobrym przykładem, nie ma żadnej szkody ani kary za wydajność po prostu dzwoniąc pod numer $('#progressbar').progressbar().

Kiedy zrobić chcesz zrobić, prawdopodobnie dlatego, że jesteś manipulowania DOM lub jakiejś kosztownej operacji w zależności od obecności elementu, upewnij się buforować połączenia, szczególnie jeśli jest to kompleks selektor:

specialThings = $('section .special') 

if specialThings.length > 0 
    doStuffWith specialThings 

lub alternatywnie, wykorzystując bezpieczeństwa var coffeescript za:

if (specialThings = $ 'section .special').length 
    doStuffWith specialThings 
+0

To ma sens, dzięki! –

Powiązane problemy