2013-05-20 64 views
0

我有我的Perl CGI处理,像这样的HTML表单:验证几个字段具有相同名称的使用jQuery验证

<form action="process.cgi" id="main"> 
    <input type="text" name="foo" class="required" /> 
    <input type="text" name="foo" class="required" /> 
    <input type="text" name="foo" class="required" /> 
</form> 

而且我与jQuery Validation plugin验证它。问题是,当我拨打$('#main').valid()时,它只检查第一个字段是否为空。如何让它检查所有的字段?

+0

name属性是一种唯一标识javascript输入元素的方法。你基本上用你当前的代码连续三次覆盖它,因此它不起作用。 http://www.w3schools.com/tags/att_input_name.asp –

+2

我不相信这是正确的。尽管'id'属性必须是唯一的,但为了将它们作为数组呈现给处理系统(在本例中为Perl),通常会给几个元素使用相同的名称。请参阅http:// stackoverflow。com/questions/5518458/does-a-name-attribute-have-to-be-unique-in-a-html-document –

+0

这是有效的html,但jquery validate无法处理多个具有相同名称的元素 - 一些讨论这里http://stackoverflow.com/q/931687/678338。如果你的html无法更改,那么你需要更改jquery验证 –

回答

-2

OFFICIAL DOCUMENTATION:
jqueryvalidation.org/reference/#link-markup-recommendations

“委托项目:需要所有投入要素需要验证A‘名’属性,和插件不会没有这个工作‘名’属性也必须是唯一的因为这是插件跟踪所有输入元素的方式,但是,每一组radio或checkbox元素将共享相同的“名称”,因为这个分组的值代表单个表单数据。


<input type="text" name="foo" class="required" /> 
<input type="text" name="foo" class="required" /> 
<input type="text" name="foo" class="required" /> 

报价OP:

麻烦的是,当我打电话$('#main').valid(),它只会检查 第一场非空。如何让它检查所有的字段?

它没有什么特别的与.valid(),它会失败相同的使用其他jQuery验证方法。这是因为所有三个字段都有相同的namefoo对于这个插件每个input必须有一个唯一name

DEMO:jsfiddle.net/xaFZj/


编辑

,而使用这个插件不能重名。该演示清楚地表明,当name属性重复时,该插件将失败。没有解决方法,因为name属性是插件跟踪表单元素的方式。

jsfiddle.net/ed3vxgmy/

唯一的例外是无线电或复选框基团,其中每个群组中的元素将共享相同的name

+1

是否记录在某处? –

+1

@KitPeters,[请参阅MARKUP RECOMMENDATIONS部分下的第二段:](http://docs.jquery.com/Plugins/Validation/Reference)_“name属性是输入元素所必需的,验证插件不会没有它就无法工作。“_因为插件需要'name'属性来跟踪所有内容,所以逻辑上它需要是唯一的名称。 – Sparky

+2

这很有道理。可惜它不适合我的申请;似乎是一个相当不错的SW。 –