2012-06-11 6 views
2

필자는 필수 필드가 채워 졌는지 확인하는 함수를 사용하고 있습니다. 나는이 두 가지 기능을 가지고 있지만 첫 번째 기능은 그렇지 않다. 자바 스크립트가 코드를 실행하는 것을 멈추지 않아야한다.false 반환 후 JavaScript 실행 코드

이 함수는 true를 돌려 :

//Checks if various stages are ready 
function trnReady(area) { 
    switch (area) 
    { 
     case 'settings': 
      $('input.required').each(function(){ 

       if($(this).val() == '') 
       { 
        return false; 
       } 
      }); 
     break; 
    } 
    return true; 
} 

을이 하나가 false를 반환하는 동안 :

//Checks if various stages are ready 
function trnReady(area) { 
    var r = true; 
    switch (area) 
    { 
     case 'settings': 
      $('input.required').each(function(){ 

       if($(this).val() == '') 
       { 
        r = false; 
       } 
      }); 
     break; 
    } 
    return r; 
} 

는 내가 처음 반환 코드 실행을 중단 것이라고 생각? 그것이 범위와 관련이 있는지 궁금합니다.

+1

그것은 코드를 실행 중지 않습니다 r = false;return r = false;에 교체를 최적화 할 수 있습니다 .. .each()에 건네지는'return'을 한 함수에서만 가능합니다. –

+0

호출자는 각각 함수의 반환 값을 반환하지 않습니다. –

답변

5

첫 번째 코드 조각 return false; 메서드에 전달 된 내부 함수 만 실행을 중지합니다. 또한 jquery API에 따라 jquery 반복을 중지합니다. 그러나 어쨌든 trnReady는 true를 반환합니다.

두 번째 코드는 올바르지 만 (이미 필드 중 하나가 작성되지 것을 알 때 JQuery와에 의해 반복을 중지합니다) 당신은

+0

최적화 도움말도 가져 주셔서 감사합니다. – LongInt

2

이러한 각 함수에는 내부에 중첩 된 두 번째 함수가 포함되어 있으며이 함수는 적용 할 것으로 예상되는 중첩 함수 내부의 반환 값이지만 실제로는 반환하지 않습니다. 내부 함수에서 외부 함수의 호출자로 돌아갈 수 없습니다. 가장 좋은 방법은 내부 함수에 변수를 설정 한 다음 두 번째 예제에서와 같이 외부 함수에서 해당 변수의 값을 반환하는 것입니다.

+0

물론! 고마워, 나는 여기서 맹목적으로 쳐다보고 있었다. – LongInt

1

첫 번째 예에서 함수는 false을 반환하지만 현재 사례 설명의 범위에만 있습니다. false은 아무런 영향을 미치지 않으며 모든 동작은 발생시 호출되지 않습니다.

편집 : false는 .each에 전달 된 익명 함수 내에서만 유효합니다.

+1

OP를 혼란스럽게하는 동작은'case' 문이 아니라'each'의 익명 함수로 인해 발생합니다. – apsillers

3

첫 번째 코드에서 returneach의 인수 인 함수에 적용됩니다. returntrnReady 기능에는 적용되지 않습니다. 따라서 return falseeach의 익명 함수입니다.

두 번째 스 니펫에서 return은 함수의 return이 올 바르고 정상적으로 작동합니다.

1

jQuery each은 각 오브젝트를 정의 된 기능으로 전달하는 반복자입니다.

정의 된 함수가 true를 반환하면 반복이 계속됩니다 (다음 객체로 넘어갑니다). l 함수가 false를 반환하면 반복이 중지됩니다.

그러나만을 반복

코드는 break 안타 정지하지만, 이러한 경우에 실행되는 다른 return 문이 없다.

관련 문제