2012-04-24 2 views
0

페이지에 많은 입력이 있으며 적어도 5 개의 항목이 채워져 있어야합니다. 그리고 만약 아니라면 적어도 5를 채워야한다는 메시지를 보여주세요. 지금까지 나는 다음을 시도했지만 반복해서 오류를 반복해서 보여줍니다. 이 일을하는 올바른 방법은 무엇입니까?jQuery 적어도 5 개의 입력에 데이터가 있음을 확인하십시오.

$('div.inputs input').each(function(i) { 
    $input = $(this); 
    while (i < 5) { 
     if ($($input).val() == '') { 
      alert('must fill at least 5 items!'); 
     } 
    } 
});​ 
+0

가능한 [jQuery에서 하나 이상의 입력이 채워지는 경우 감지] (http://stackoverflow.com/questions/5908199/detecting-if-at-least-one-input-as-array) - 채워진 - jquery) –

+0

그래서 실망! 비슷한 문맥이나 의도 된 결과를 가지기 때문에 중복되지 않습니다. 문제는 ** 내 문제 ** ** ** 내 코드 **를 고치려고하는 것이므로 다른 질문에 대한 답은 관련이 없습니다. 단, 제 질문에 대한 답변이 아닌 빠른 승리를 얻는 데에만 관심이있는 경우에만 해당됩니다. – Cameron

+0

다른 사람이 당신과 같은 코드를 가질 것이라고 생각하지 않기 때문에 질문이 너무 현지화되었습니다. 코드에 무엇이 잘못되었는지 * 묻는다면 다를 수 있지만 이전에 대답 한 *을 수행하는 올바른 방법은 무엇인지 물었습니다. –

답변

2

당신은 더 나은 선택을 만들 수 있습니다 :

if ($('div.inputs input[value!=""]').length < 5) { 
    alert('must fill at least 5 items!'); 
} 

설명 :

div.inputs input[value!=""] 선택하면 다음 value 속성에서 무언가가 모든 입력 필드를 선택하고, 선택한 항목의 길이를 가져올 수 있습니다.

이전 솔루션 (어떻게 든) 작동하지만 더 나은 일 추천 : KARASZI 이스트 반의 대답에 표시된

if ($('div.inputs input').filter(function() { return $(this).val().length > 0; }).length < 5) { 
    alert('must fill at least 5 items!'); 
} 
+0

나는이 작품이 놀랍다. 입력 값을 입력해도'value' 속성은 변경되지 않습니다. jQuery가 속성이 아닌 요소의 속성을 검사하는 것 같습니다. 다른 방법 (빈 값'$ ('input [value = ""]')'), jQuery (또는 Sizzle)을 가진 요소를 선택하는 것은 작동하지 않는'querySelectorAll' 메소드를 사용하는 것처럼 보이기 때문에 좋지 않습니다. 이 방법 : http://jsfiddle.net/pQmRC/ –

+0

예, 나는 게시 한 이후로 같은 방황했습니다 :) –

+0

음 ...내가 생각했던 것보다 훨씬 혼란스러워 보입니다. 내부 메소드를 사용하는 것은'$ ('input [value! = ""]')와 똑같이 작동한다. , 결국, .filter()';를 사용하는 것이 더 낫습니다.) –

2

방법은 깔끔한하지만, 지금까지 설명과 같은 코드 및 잘못된 것입니다 당신이 그것을 해결하는 방법은 (주) 문제가있는 while 조건이 :

while(i<5) 

... 변수, i을 평가하고, 그이 루프의 내용에 의해 변경되지 않습니다 . .each() 루프의 첫 번째 반복에서 i은 0이므로 while 조건이 참일 경우 이되고 계속 인 경우 무한 루프가 발생합니다. 이 같은 뭔가를 할 수

는 값을 테스트하는 각 입력을 통해 코드와 루프의 일반적인 구조를 유지하려면 :

카운터 빈 증가하지 않습니다 각 입력에 대해,이다
var filled = 0; 

$('div.inputs input').each(function (i) { 
    if (this.value != '') { 
     filled++; 
     if (filled === 5) 
      return false; 
    } 
}); 

if (filled < 5) { 
    alert('must fill at least 5 items!'); 
} 

다음 루프 후 카운터를 확인하십시오. .each() 콜백 함수에서 false을 반환하면 .each() 루프가 즉시 중지됩니다. 최소 5 개의 비어 있지 않은 값에 도달하면 계산을 계속할 필요가 없습니다.

+1

+1 겸손한 사람에 대한 ...! – gdoron

관련 문제