2009-09-22 97 views
0

我有一個表單,用戶可以選擇一個事件列表,每個事件的開始時間都是一個類名。提交表單時,我需要檢查用戶是否選擇了具有相同啓動時間的多個事件。複選框表單驗證jQuery

例如在今天如果用戶選擇了事件A和事件C,它會觸發驗證消息。

<form> 

<h3>Today</h3> 

    <input type="checkbox" name="date" class="starttime-1730" value="A" />Event A 
    <input type="checkbox" name="date" class="starttime-1600" value="B" />Event B 
    <input type="checkbox" name="date" class="starttime-1730" value="C" />Event C 
    <input type="checkbox" name="date" class="starttime-1630" value="D" />Event D 


<h3>Tomorrow</h3> 

    <input type="checkbox" name="date" class="starttime-1830" value="A" />Event A 
    <input type="checkbox" name="date" class="starttime-1830" value="B" />Event B 
    <input type="checkbox" name="date" class="starttime-1930" value="C" />Event C 
    <input type="checkbox" name="date" class="starttime-2030" value="D" />Event D 

<input type="submit" name="submit" /> 

</form> 

回答

1

首先,將啓動時間放在數據屬性中,而不是類(這不是類的用途)。例如:

<input type="checkbox" name="date" data-starttime="1730" value="A" />Event A 

下一頁放兩天一個字段裏面,這樣你就可以用相同的功能檢查他們:

<form id="form1"> 
<fieldset> 
<caption>Today</caption> 

    <input type="checkbox" name="date" data-starttime="1730" value="A" />Event A 
    <input type="checkbox" name="date" data-starttime="1600" value="B" />Event B 
    <input type="checkbox" name="date" data-starttime="1730" value="C" />Event C 
    <input type="checkbox" name="date" data-starttime="1630" value="D" />Event D 
</fieldset> 
<fieldset> 
<caption>Tomorrow</caption> 

    <input type="checkbox" name="date" data-starttime="1830" value="A" />Event A 
    <input type="checkbox" name="date" data-starttime="1830" value="B" />Event B 
    <input type="checkbox" name="date" data-starttime="1930" value="C" />Event C 
    <input type="checkbox" name="date" data-starttime="2030" value="D" />Event D 
</fieldset> 
<input type="submit" name="submit" /> 
</form> 

這裏是做匹配的jQuery函數。它沒有經過測試。

function submit(){ 
    $("#form1 fieldset").each(function(i){ 
    var hashmap = {}; 
    $("input:checked", $(i)).each(function(j){ 
     var mytime = $(j).data("starttime"); 
     if(hashmap[mytime] != undefined){ 
     //Collision, report it or something 
     }else{ 
     hashmap[mytime] = 1; 
     } 
    }); 
    }); 
} 
+0

我跟你說小時不應該在classname中。但是當你創建自己的屬性時它是否有效? – Natrium 2009-09-22 07:08:15

+0

它是有效的HTML5:http://ejohn.org/blog/html-5-data-attributes/ jQuery在內部使用它的負載(查看一個jQuery UI元素與螢火蟲,你會看到它們)。 – Marius 2009-09-22 07:10:52

+0

關於使用數據元素的好主意,我同意它更好,但不幸的是我不能使用HTML5。 – Tom 2009-09-22 07:12:48