2012-07-25 4 views
2

체크 여부에 따라 다음 PHP 페이지에 "true"또는 "false"중 하나를 올리는 웹 폼에서 일련의 체크 박스를 만들려고합니다. 나는 각 체크 박스 (value = "true")에 대해 항상 반대 (checkbox가 체크되었을 때, 숨겨진 체크 박스가 체크되지 않았을 때)와 같은 숨겨진 체크 박스 (value = "false")를 가질 것이라고 결정했다. jQuery 이것을하기 위해.체크 및 체크되지 않은 체크 박스 모두 게시하기

'td'요소의 수를 알 수 없습니다 ('td'는 버튼을 사용하여 여러 값을 제출할 때 무한 횟수 복제 할 수 있음). 테스트 목적으로 jQuery에 경고를 추가했습니다.

내 소스 코드에 jQuery 코드와 숨겨진 체크 박스를 추가하면 (테스트 목적으로 표시됨) 코드가 작동하지 않고 웹 페이지의 다른 jQuery가 모두 작동하지 않습니다!

jQuery 코드 :

$(document).ready(function(){ 
    /***post all 'required' checkboxes instead of just checked ones***/ 
    $(".required").click(function(event){ 
     event.preventDefault(); 
     alert("test"); 
     nextIndex = this.index() + 1; 
     alert(nextIndex); 
     $(".required:eq(nextIndex)").attr("checked", !.required:eq(nextIndex).attr("checked")); 
    }); 
}); 

HTML :

<td> 
    <input type="checkbox" class="required" name="required[]" value="true"> 
    <input type="checkbox" class="required" name="required[]" value="false" style="display: none;" checked> 
</td> 
+1

이 체크 박스에 비해 라디오 버튼에 더 적합한 작업 같은 소리 다음은 PHP에서 무엇을 얻을 수 있습니다. – lbstr

답변

1

이 줄은 아마 일이 휴식을 일으키는 : 당신은 아마 의미

$(".required:eq(nextIndex)").attr("checked", !.required:eq(nextIndex).attr("checked")); 

:

$(".required:eq(" + nextIndex + ")").attr("checked", !$('.required:eq(' + nextIndex + ')').attr("checked")); 

또한 따옴표 대신 nextIndex을 입력해야합니다.

내 생각 엔 자바 스크립트 콘솔이 이와 관련된 일종의 오류를 발생 시켰을 것입니다.

는 편집 :

nextIndex = this.index() + 1; 

.index()는 jQuery를 객체에 호출해야 JQuery와 함수이다 : 나는 눈치

또 다른 오류가이 있었다. this는 클릭 된 요소입니다, 그래서 당신은 말할 필요합니다

nextIndex = $(this).index() + 1; 

BTW, 당신이이 nextIndex 미신적 점보의 모든에서 당신을 절약 할 수 jQuery's .next() function.을 확인 할 수 있습니다.

+0

글쎄, 내 페이지의 다른 jQuery가 작동하고있어, 내가 가진 구문 오류에 대해서도 신경을 써야한다. - 감사합니다! 그러나, 그것은 여전히 ​​내가 원하는 방식으로 작동하지 않습니다. 확인란을 클릭하면 첫 번째 경고 메시지가 표시되지만 두 번째 경고 메시지는 표시되지 않으며 확인란이 선택 취소됩니다. 숨겨진 체크 박스에는 아무런 변화가 없습니다 (체크 된 상태로 유지됩니다). – torjinx

8

확인란 중 하나를 숨길 필요가 없습니다. 확인란을 선택하지 않으면

<input type="hidden" name="required" value="false" /> 
<input type="checkbox" name="required" value="true" /> 

, 다음 숨겨진 필드가 false 값으로 제출됩니다 : 여기 당신이 원하는 무엇을 달성해야 솔루션입니다. 체크 박스가 선택되면 체크 박스의 값 true은 숨겨진 입력 값 false을 무시합니다.

각 확인란의 이름을 약간 다르게 지정할 수 있으면 작동해야합니다.

다음은 값의 배열을 위해 잘 작동한다 :

<input type="hidden" name="required[0]" value="false" /> 
<input type="checkbox" name="required[0]" value="true" /> 

<input type="hidden" name="required[n]" value="false" /> 
<input type="checkbox" name="required[n]" value="true" /> 

이 방법, 당신은 숨겨진 확인란을 전환하기 위해 자바 스크립트 모든 클라이언트 측 필요하지 않습니다.당신이 의지와 OK 것을 가정

<input type="checkbox" name="checkbox_name[]" /> 

그런 다음 jQuery를이 조각이 당신을 위해 작동합니다 :이처럼 체크 박스의 이름을 지정하는 경우

+1

네, 해결책은 체크 박스의 "off"값을 가진 각 체크 박스 앞에'hidden' 요소를 출력하는 것입니다. 확인란을 선택하면 숨겨진 입력 값 대신 "on"값이 게시됩니다. – meagar

+0

이것은 좋은 해결책입니다. 그러나 얼마나 많은 체크 박스가 있을지는 모르겠지만 ... 웹 페이지의 버튼을 사용하여 추가 할 때 자동으로 이름을 붙일 수 있는지 알 수 있습니다. – torjinx

+0

DOM * * 체크 박스 요소 앞의 체크 박스와 동일한 이름의 숨겨진 입력을 추가하는 한 각 체크 박스에 동일한 이름의 숨겨진 입력이 있으면이 기능이 작동합니다. 숨겨진 입력이 우연히 노드에 * 노드 *로 추가되면 * 역도 효과를 가지며 값은 항상 false (숨겨진 입력의 값)가됩니다. – drew010

0

, 당신은 반드시 작업 할 인덱스가없는 자바 스크립트.

$('form').submit(function(){ 

    $(":checkbox:not(:checked)").each(function(element, index){ 
     $(this).attr({value: 'false', checked:'checked'}); 
    }); 

    return true; 
}); 

이 그들을 확인, 선택되지 않은 모든 확인란을 통해 루프 및 false에 자신의 값을 설정합니다.

[checkbox_name] => Array 
    (
     [0] => off 
     [1] => on 
     [2] => off 
    ) 

대신에 :

[checkbox_name] => Array 
    (
     [0] => on 
    ) 
관련 문제