2011-09-02 2 views
10

저는 jQuery를 처음 사용했기 때문에 찾을 수없는 요소의 처리를 단순화하고 싶습니다. 이는 상당히 일반적인 문제입니다.요소를 찾을 수 없을 때 jQuery에서 예외를 throw 할 수 있습니까?

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

지금, 나는 그것을 찾을 수없는 경우 반환 된 변수가보고 검사 할 수 있습니다,하지만 난 확실히 예외가이 경우에 자동으로 던져지지 원합니다 : 다음 코드는 내가 무슨 뜻인지 보여줍니다. 이 모든 것이 jQuery에서 가능합니까? 그렇지 않다면 jQuery와 같은 자동 오류 검사를 구현하는 일반적인 관용구가 있습니까?

답변

12

그 작업을 수행하는 기존 기능을 잘 모르겠어요,하지만 난 당신이 jQuery를 사용하기 전에 페이지의 상단에 넣어 경우이 당신을 위해 일을해야한다고 생각하지만,로드 후 :

(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

개선 사항 : throw 라인을 'throw'요소 없음 : '+ arguments [0];로 변경하면 오류의 원인을 알 수 있습니다. – Jamiec

+0

@Jamiec 고마워, 그건 좋은 추가 :) – Paulpro

+0

사실, 지금이 솔루션에 진짜 문제가 나타납니다. $를이 함수로 바꾸면 jQuery API에 _ $로 액세스해야합니다. 예를 들면 : _ $. 대신 예외를 발생시키는 래퍼가 _ $로 표시되도록 솔루션을 변경하는 방법에 대해 설명합니다. $를 완전히 감쌀 수 없다면 정의되지 않은 변수를 검사하는 대신 _ $()를 호출하는 것이 좋습니다. – aknuds1

2

:

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

내가 예외를 던지는 것은 좋은 생각이 아니라고 생각 : P

+0

아마도 JavaScript의 예외에 대해 당신이 맞을 것입니다. 하지만 모든 변수를 명시 적으로 확인하지 않아도됩니다. 그것은 C에서 리턴 값을 자동으로 나타내는 에러를 처리하기위한 매크로를 정의하는 것과 같습니다. – aknuds1

+0

@ aknuds1 daveoncode가 정확합니다. 캐치되지 않은 예외는 Javascript의 오류이므로 실행을 중지시킵니다. 따라서 예외를 사용하면 "try catch"블록을 가지고 있어야합니다. 포착되지 않은 예외가 발생한 후 코드 행에 도달하지 못하는 방법을 보여주기 위해 JSFIddle 예제를 업데이트했습니다. http://jsfiddle.net/Paulpro/P87Cp/ – Paulpro

+0

@PaulPRO 이것은 다른 언어와 다르지 않습니다. 이점은 하나의 함수 내에서 정의되지 않은 모든 변수를 한 곳에서 처리 할 수 ​​있다는 것입니다 (catch 블록). – aknuds1

관련 문제