2011-10-05 126 views
1

再次,我需要根據另一個禁用一些複選框。 我正在創建一個註冊參加醫療會議的表單。 他們可以註冊一些組(每組長度爲3小時),所以如果他們在10am組註冊(通過點擊複選框),他們不能在11,12組註冊(他們應該可以在下午1點註冊)。 有不規則數每小時組(3在上午10時,2日上午11點例如) 這是我需要「驗證」的形式的一個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

如果這些複選框是動態的,你可以通過

  1. 實現這一目標有每一個複選框的ID /值與組中啓動時間相關聯的數據結構。
  2. 有另一個數據結構包含代表同時啓動的組的所有複選框。
  3. 將一個onchange事件偵聽器添加到複選框,該複選框將首先通過(1)中的數據結構找出受影響的複選框屬於哪個時間。然後,在(2)中的數據結構的幫助下,獲取受影響的複選框+3的開始時間範圍內的所有複選框,並全部禁用它們。

當然,您可以跳過(1)將開始時間作爲參數傳遞給您將在onchange事件處理函數上調用的函數。

對於(2),如果是適合的,你可以把那個開始在給定時間x<span name="startTimex">所有複選框,後來與一個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. 用戶選擇一組具有時間12(禁用10,11,12,13,和14),
  2. 之後,用戶選擇與時間的檢查16(禁用14,15,16,17)
  3. 如果用戶取消選中時間爲12的組,則在時間14開始的檢查將被啓用,當它們應該被禁用以使16組仍然被選中時。

你可以通過檢查禁用,或再次調用checkSelected功能適用於所有以禁用,必須再次禁用所有組件檢查時間之前,可能會影響檢查其他小組處理這個問題。

另外,請記住,這種JavaScript驗證應該總是被強制服務器端,以防止js禁用用戶繞過他們。

+0

哈維,你能幫我給我一個代碼提示嗎?我幾乎爲null ..... ..... gracias。 –

+0

我已經用一個例子更新了答案。 –

+0

哈維,不工作.... –