【问题标题】:Checkbox form validation jQuery复选框表单验证jQuery
【发布时间】:2009-09-22 06:46:02
【问题描述】:

我有一个表单,用户可以在其中选择事件列表,每个事件都有开始时间作为类名。提交表单时,我需要检查用户是否选择了多个具有相同开始时间的事件。

例如在今天,如果用户选择了事件 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>

【问题讨论】:

    标签: jquery html validation


    【解决方案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;
          }
        });
      });
    }
    

    【讨论】:

    • 我同意你说小时不应该在类名中。但是当你创建自己的属性时它是有效的 xhtml 吗?
    • 它是有效的 HTML5:ejohn.org/blog/html-5-data-attributes jQuery 在内部使用了它的负载(查看带有 firebug 的 jQuery UI 元素,你会看到它们)。
    • 关于使用数据元素的好主意,我同意它更好,但不幸的是我不能使用 HTML5。
    • 大多数浏览器会毫无怨言地接受数据属性。你会得到的唯一抱怨是来自验证者,你不应该听他们那么多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多