2011-02-08 6 views
0

이 루프는 click() 후에 실행되며, return false이 반복기 내에 더 깊게 배치되어있는 경우 return false이 아닙니다. 거짓을 반환하는 방법은 무엇입니까? ? 메서드 내에서 'false'를 반환하는 방법은 무엇입니까?

$.each($(".payment"), function(key, value) { 
    the_date = $(value).children("input:first").val(); 
    if(the_date != "") { 
    if(the_date.split("/").length != 3) { 
     return false; // <--- This doesn't work 
    }; 
    }; 
}; 

다음은 '각'콜백에 적용되는 거짓

if($("input#date_awarded").val().split("/")[2] > 2010) { 
    return false; // <-- Totally works 
}; 
+0

세미콜론이 잘못되었습니다. 블록 다음에 세미콜론을 넣지 마십시오. – SLaks

답변

3

을하고, 루프를 중단 : 그럼 이런 식으로 작업을 수행합니다.

대신 변수를 사용하여 반환 값을 보관하고 루프 이후에 반환 할 수 있습니다.

var returnValue = true; //use a variable for the return value 
$.each($(".payment"), function (key, value) { 
    the_date = $(value).children("input:first").val(); 
    if (the_date != "") { 
     if (the_date.split("/").length != 3) { 
      returnValue = false; // set the return value 
      return false; // break the loop 
     } 
    } 
}); 
return returnValue; // return the return value 
+0

환상적인 아이디어 패트릭! – Trip

+0

@Trip : 천만에. – user113716

+0

'return returnValue'는'return true'이거나'return undefined'이어야합니다 – Raynos

0

수익을 작동합니까 다른 검사기입니다. '클릭'콜백에 적용 하시겠습니까? 각 콜백에서 return false 반환하고, .each()에서

jQuery(selector).click(function() { 
    var returnValue = true; 

    jQuery(anotherSelector).each(function() { 
     do_stuff(); 
     returnValue = false; 
    } 

    return returnValue; 
} 
1

버그를 수정했지만 코드를 정리하는 @patrickdw 코드 샘플을 작성하십시오.

var returnValue = true; 
$.each($(".payment>input:first-child"), function (key, value) { 
    if (this.value.split("/").length !== 3) { 
     return (returnValue = false); 
    } 
}); 
return returnValue; 

또는 그냥 걷어차기를 사용하면 본문 블록이없는 루프의 한 줄에 다시 실행할 수 있습니다.

for (var returnVal = true, var i = 0, var inputs = $(".payment>input:first-child"), var text = $(inputs[i]).val(); i < inputs.length && ((text.split("/").length !== 3 && (returnVal = false)) || true); text = $(inputs[++i]).val()); 
return returnVal; 

난 당신이 메인테이너을 고통과 루프에 대한 그 정말 정말 남용 위처럼 코드를 작성하지 않는 것이 좋습니다.

+0

당신은 'first-child' ([OP의 이전 질문]에서 내 대답이되어)를 사용해야합니다 (http://stackoverflow.com/questions/4936127/children-of-many-parents-jquery-selector/ 4936216 # 4936216)). 그리고 당신이 일을 정리하는 한'.val() '대신에'this.value'를 쓸 수도 있습니다. – user113716

+0

@patrickdw'this.value'와'.val()'은 의미 상으로 다릅니다. '.val()'은 이상한 일을합니다. 나는 입력의'type'을 모른 채 대체가 안전한지 여부를 알기 위해 노력하지 않습니다. – Raynos

+0

좋은 지적입니다. 그것들은 단지 텍스트 입력 이었으므로 안전합니다. 필자는 사파리에 문제가있는'type = 'radio ''에'input '요소에 대한 .val() 수정 사항이 있다고 생각합니다. – user113716

관련 문제