2011-10-05 8 views
1

다른 확인란에 따라 일부 확인란을 비활성화해야합니다. 의료 협약에 참가자를 등록 할 양식을 작성 중입니다. 그들은 어떤 그룹에 등록 할 수 있습니다 (각 그룹은 3 시간입니다), 그래서 그들은 10am 그룹에 등록하면 (체크 박스를 클릭함으로써) 11, 12am 그룹에 등록 할 수 없습니다 (그들은 1pm에 등록 할 수 있어야합니다).). 시간 당 그룹의 불규칙한 수 (3 예를 들어 오전 11시 오전 10시, 2시)이 있습니다이 난에 '검증'을 필요로하는 형태의 ppart은 다음과 같습니다그룹의 확인란을 다시 사용하지 않으려면

<form method="post" action="process.php"></form> 
<input type="checkbox" value="101" name="convention1"> 10 am: Cariovascular desease<br> 
<input type="checkbox" value="102" name="convention2"> 10 am: Changes on toracic  surgeon<br> 
<input type="checkbox" value="103" name="convention3"> 10 am: New drugs on heart<br> 
<input type="checkbox" value="111" name="convention4"> 11 am: New drugs on heart (II)  <br> 
<input type="checkbox" value="112" name="convention5"> 11 am: Dynamic process on blood pressure<br> 
<input type="checkbox" value="113" name="convention6"> 11 am: Aortic disease<br> 
<input type="checkbox" value="121" name="convention7"> 12 am: Pulmonar Pressure<br> 
<input type="checkbox" value="122" name="convention8"> 12 am: Open table<br> 
<input type="checkbox" value="131" name="convention9"> 1 pm: Neurological aspects on heart rate<br> 
<input type="checkbox" value="132" name="convention10"> 1 pm: Cardiovascular disease (II)<br> 
<input type="checkbox" value="133" name="convention11"> 1 pm: Mioresponse on heart failure<br> 
<input type="checkbox" value="141" name="convention12"> 2 pm<br> 
<input type="checkbox" value="142" name="convention13"> 2 pm<br> 
<input type="checkbox" value="143" name="convention14"> 2 pm<br> 
<input type="checkbox" value="151" name="convention15"> 3 pm<br> 
<input type="checkbox" value="152" name="convention16"> 3 pm<br> 
<input type="checkbox" value="153" name="convention17"> 3 pm<br> 
<input type="submit"></input> 
</form> 

내가 이걸 어떻게해야합니까?

많은 감사

답변

0

그 체크 박스 당신이 그룹에서 시작 시간과 모든 체크 박스의 ID/값을 연결하는 데이터 구조를 갖는

  1. 하여이를 달성 할 수있는 동적 인 경우.
  2. 다른 데 동시에 시작하는 그룹을 나타내는 모든 확인란을 포함하는 데이터 구조.
  3. (1)의 데이터 구조에서 도움을 받아 해당 확인란이 속한 시간을 먼저 확인하는 확인란에 onchange 이벤트 수신기를 추가합니다. 그런 다음 영향을받은 체크 박스 +3의 시작 시간 내에있는 모든 확인란을 (2)의 데이터 구조를 사용하여 가져 와서 모두 비활성화합니다.

물론 onchange 이벤트 처리기에서 호출 할 함수에 시작 시간을 인수로 전달하여 (1)을 건너 뛸 수 있습니다.

적합 인 경우 (2), 그리고, 당신이 <span name="startTimex">에 주어진 시간 x에서 시작하는 모든 체크 박스를 넣고, 나중에 getElementsByName()와 체크 박스를 얻을 수있는 경우

. 이것은 더럽다.

는 신속하고 더러운 해결책이 될 것입니다 :

<span name="startTime10"> 
<input type="checkbox" value="101" name="convention1" onchange="checkSelected(this, 10)"> 
    10 am: Cariovascular desease 
</span> 
... 
<span name="startTime13"> 
<input type="checkbox" value="132" name="convention10" onchange="checkSelected(this, 13)"> 
    1 pm: Cardiovascular disease (II) 
</span> 

.... 

function checkSelected(check, startTime) { 
// For each of the time groups that are to be disabled 
for (var i = -2; i < 3; i++) { 
    var time = "startTime" + (startTime + i); 
    var elements = document.getElementsByName(time); 
    for (var j = 0; j < elements.length; j++) { 
     elem = elements.item(j).childNodes.item(0); 
     if (elem != check) { 
      elem.disabled = check.checked; 
     } 
     else {} 
    } 
} 

}

그룹이 해제를 선택하면이 기능이 체크 박스를 가능하게 inconditionally도 될 것이라고 고려하시기 바랍니다.

  1. 사용자가 (10, 11, 12, 13, 14는 비활성화) 이후
  2. , 사용자가 시간에 체크를 선택 시간 (12)과의 그룹을 선택한다 : 이것은 예를 들면 문제의 경우 일 수있다 16 (14, 15, 16, 17 사용 안 함)
  3. 사용자가 시간 12의 그룹을 선택 취소하면 16 그룹이 여전히 선택되도록 설정해야 할 때 시간 14에서 시작하는 검사가 다시 활성화됩니다.

당신은, 또는 전부를 다시 사용하지 않도록 설정해야합니다 모든 구성 요소를 사용하지 않도록하기 위해 시간을 확인을 위해 다시 checkSelected 함수를 호출하여 비활성화하기 전에 체크에 영향을 미칠 수있는 다른 그룹을 확인하여이 문제를 해결할 수 있습니다.

또한 이러한 유형의 자바 스크립트 유효성 검사는 항상이어야하며 js가 비활성화 된 사용자가이를 우회하지 못하도록 서버 측에 적용해야 함을 기억하십시오.

+0

Xavi, 코드에 대한 힌트를 제공해 주시겠습니까? 나는 javascript ..... gracias로 거의 null이다. –

+0

예를 들어 답변을 업데이트했습니다. –

+0

Xavi, 작동하지 않습니다 ... –

관련 문제