2011-11-15 4 views
2

여기에 설명 된대로 http://iamcam.wordpress.com/2008/01/15/unchecked-checkbox-values/이라는 체크 박스를 선택하지 않아도 값을 얻으려는 이유가 무엇인지에 대한 자세한 내용은 다루지 않지만 필연적입니다. 그 말은 ..동일한 이름을 가진 입력의 유효성 확인

이 멋진 방법은 내가 작성한 양식의 추상화 레이어의 일부로, jquery 유효성 검사에서 유효성을 검사하는 몇 가지 체크 박스를 가지고 있는데, 그 문제는 html 이런 식이다.

<input class="" type="hidden" value="0" name="check[legal]"> 
<input id="legal" class="required" type="checkbox" name="check[legal]" value="1"> 

무엇 발생하는 것은 그들이 같은 이름을 모두 갖고 있기 때문에 JQuery와 유효성이 (둘 중 첫 번째 입력의 유효성을 검사하는 것이다 나는 단지 첫 번째를 제거 할 수 있고 함께 할 수 있음을 이해 , 두 번째 확인란의 유효성을 검사 할 방법이 있는지 알고 싶습니다. 모든 항목을 그대로 둡니다. (여기에 두 개의 도로가 있습니다. 1) 입력 ID로 유효성을 검사합니다. 2) 숨겨진 요소를 유효성 검사에서 제외합니다. 그런 식으로 생각하면 동일한 이름을 가진 두 번째조차도 피할 수 있습니다.)

+2

왜 그들은 같은 이름을 가져야합니까? 그것들은 같은 그룹의 체크 박스에 속해 있습니까? 그렇다면 함께 검증됩니다. 그렇지 않은 경우 다른 이름을 지정하십시오. 이것은 간단 해 보이는데, 그래서 나는 무엇을 놓치고 있습니까? – Sparky

+0

이 질문을 피하기 위해 게시 한 기사를 잘못 읽었습니다. 그것들은 같은 이름을 공유하기 때문에 두번째 것 (보이는 것)이 체크되지 않으면 $ _POST 배열에 아무것도 아닌 0이됩니다. – 0plus1

+0

JavaScript를 사용하여 확인란의 값을 다른 숨겨진 필드에 복사하고 대신 항상 그 값을 보내거나 사용하십시오. 뭔가가 포스트 배열의 일부이기 때문에 그것을 사용해야한다는 것을 의미하지는 않습니다. – Sparky

답변

3

좋아, 질문에 대한 직접적인 대답은 사용자 지정 유효성 검사 방법을 shown in this example으로 정의 할 수 있다는 것입니다. 중요한 코드는 다음과 같습니다.

$.validator.methods.checkLegal = function(value, element) { 
    return $('input[type=checkbox][name="check[legal]"]').attr('checked'); 
} 

$('form').validate({ 
    rules: { "check[legal]": {checkLegal: true} }, 
    messages: { "check[legal]": "You must check the box" }, 
}); 

그러나 입력란에 입력 한 링크의 설명과 동일한 이름을 사용할 필요는 없습니다. 사실, 그렇지 않으면 크게 단순화 할 것입니다. 체크 박스 목록이 아닌 경우 왜 변수 이름에 중괄호가 필요한지 불분명합니다.

즉, here is a simple example은 동일한 이름을 사용하지 않으며 숨겨진 값을 저장하고 보이는 확인란의 유효성을 검사합니다. 위의 존재에 대한 교체 : 서버에서

jQuery(function($) { 
    $('form').validate({ 
     rules: { "check[legal]": "required" }, 
    }); 

    $('#legal').click(function(e) { 
     $('#legalHidden').val($(this).attr('checked') ? 1 : 0); 
    }); 

}); 

, 당신은 단순히 [legalhidden] 체크인 및 체크 [법률] 신경 쓰지 참조 할 것. 클라이언트에서는 check [legal]에서 모든 유효성 검사가 수행되고 클릭 할 때마다 값이 legalhidden var에 복사됩니다.

+0

답변 해 주셔서 감사합니다. 알다시피, 변수 이름의 중괄호는 POST 배열의 처리를 돕기 위해 존재합니다. 예를 들어 유효성 검사를 설정하지 않은 후에 검사를 덤프하는 것 ($ _ POST [ 'check']). – 0plus1

관련 문제