2011-09-02 5 views
10

Jestem nowy w jQuery i chciałbym uprościć obsługę elementów, których nie może znaleźć, co jest dość powszechnym problemem. Poniższy kod pokazuje, co to znaczy:Czy jest możliwe, aby jQuery generował wyjątek, gdy element nie został znaleziony?

var category = $('select#Category'); 

Teraz mogę sprawdzić zmienna powrócił aby sprawdzić, czy nie został znaleziony, ale ja zdecydowanie wolę wyjątek wyrzucane automatycznie w tym przypadku. Czy to w ogóle możliwe z jQuery? Jeśli nie, czy istnieje jakiś wspólny język implementacji takiego automatycznego sprawdzania błędów na jQuery?

Odpowiedz

12

Nie jestem pewien istniejącej funkcjonalności to zrobić, ale myślę, że to powinno działać dla ciebie, jeśli można umieścić go na górze strony przed użyciem jQuery, ale po załadowaniu go:

(function(){ 
    var _$ = $; 
    $ = function(){ 
     var $res = _$.apply(0, arguments); 
     if(!$res.length && typeof arguments[0] === 'string') 
      throw 'No element Found: ' + arguments[0]; 
     return $res; 
    } 
    $ = _$.extend(true, $, _$); 
})(); 

JSFiddle Example

+0

Ulepszenie: zmiana linii rzutowania na "rzut" Brak elementu: "+ argumenty [0];" i możesz zobaczyć, który selektor spowodował błąd. – Jamiec

+0

@Jamiec Dzięki, to miłe uzupełnienie :) – Paulpro

+0

Właściwie teraz widzę prawdziwy problem z tym rozwiązaniem. Po zastąpieniu $ tą funkcją, muszę uzyskać dostęp do interfejsu API jQuery jako _ $. Na przykład: _ $. Format. Co powiesz na to, że zmienimy rozwiązanie, aby odsłonić opakowanie wyrzucające wyjątki jako _ $ zamiast? Jeśli nie mogę całkowicie zawinąć $, wolę po prostu wywołać _ $() zamiast sprawdzać niezdefiniowane zmienne. – aknuds1

2

ja po prostu korzystać z tego podejścia:

if (category.length == 1) { 
// node has been found (and is the only one in the dom) 
} 

myślę, że rzuca wyjątek nie jest dobrym pomysłem: P

+0

Może masz rację co do wyjątków w JavaScript, ale nienawidzę konieczności jawnego sprawdzania każdej zmiennej. To tak, jak w C, gdzie zdefiniowałem makra do obsługi błędów wskazujących automatycznie wartości zwracane. – aknuds1

+0

@ aknuds1 daveoncode jest poprawny. Niekontrolowane wyjątki są błędami w JavaScript i powodują zatrzymanie wykonywania. Musisz więc użyć bloków 'try catch' w całym miejscu, jeśli używasz wyjątków. Zaktualizowałem przykład JSFIddle, aby pokazać, że linia kodu nigdy nie została osiągnięta po niezatłoczonym wyjątku: http://jsfiddle.net/Paulpro/P87Cp/ – Paulpro

+0

@PaulPRO Nie różni się to jednak od innych języków. Korzyścią jest to, że mogę obsłużyć wszystkie niezdefiniowane zmienne w ramach jednej funkcji w jednym miejscu (blok catch). – aknuds1

Powiązane problemy