[jQuery] each 문에서 continue 와 break
보통 for 문을 사용하면 continue 나 break 를 사용하게 된다. 그런데 jQuery의 each에서는 continue와 break를 사용할 수가 없다. each 가 실행 중일 때 특정 조건에서 each 구문을 끝내거나 다음 조건으로 가게 하려면 어떻게 해야할까? break 나 continue를 사용하면 편한데 말이다. 다행히 each 에서 break 등을 사용할 수가 있다. return 구문을 사용하는 것이다. break 일 때는 return false 를 continue 일 때는 return true 를 사용하면 된다. 아래는 간단하게 작성한 코드이다.
<script>
function form_check()
{
var code1 = code2 = "";
var $inp = $("input[name='code[]']");
$inp.each(function() {
code2 = $(this).val();
if(code1 == code2) {
return false;
} else {
code1 = code2;
return true;
}
});
}
</script>
코드는 name=”code[]” 인 다수의 input 에서 동일한 값이 있는지 체크하는 것이다. 같은 값이 있으면 실행을 끝내는 것이다. each를 끝내기 위해서 return false 를 사용했다. return true는 위의 코드에서는 필요없는 코드이다. 이해를 돕기 위해 넣은 것이지 크게 의미가 있는 것은 아니다. 그리고 만약 each 문 아래에 실행되는 코드가 있을 때 중복되는 값이 있으면 함수의 실행을 멈춰야하는 경우도 생각해볼 수 있다. 이럴 때는 어떻게 할까? 아래의 코드를 보도록 하자.
<script>
function form_check()
{
var code1 = code2 = "";
var COD = new Array();
var $inp = $("input[name='code[]']");
$inp.each(function() {
code2 = $(this).val();
if(code1 == code2) {
return false;
} else {
code1 = code2;
return true;
}
});
COD.push(code2);
}
</script>
form_check 함수가 실행되면 input 의 값 중복을 체크한다. 중복값이 없을 때만 COD 배열에 값을 넣고 싶은데 위의 코드만 있다면 중복되는 값이 나오기 전까지의 모든 값이 배열에 추가될 것이다. 우리가 원했던 동작은 아니다. 그렇다면 어떻게 해야할까? 아래의 코드를 보자.
<script>
function form_check()
{
var code1 = code2 = "";
var COD = new Array();
var dup = false;
var $inp = $("input[name='code[]']");
$inp.each(function() {
code2 = $(this).val();
if(code1 == code2) {
dup = true;
return false;
} else {
code1 = code2;
return true;
}
});
if(dup)
return false;
COD.push(code2);
}
</script>
위의 코드르 보면 중복되는 값이 있으면 dup 를 true로 하고 each 문을 끝낸 후 dup 가 true 이면 함수의 실행을 끝내도록 되어 있다. 즉 중복되는 값이 있으면 COD 배열에는 아무런 값도 추가되지 않는 것이다. 이런 식으로 코드를 작성해야 each 문을 이용한 함수에서 원하는 동작을 수행할 수 있다.