使用带括号的 php 字段时,jQuery 验证不起作用
Posted
技术标签:
【中文标题】使用带括号的 php 字段时,jQuery 验证不起作用【英文标题】:jQuery validate not working when using php fields with brackets 【发布时间】:2013-09-07 00:03:34 【问题描述】:我正在开发一个项目,其中文档对象模型是从 jqote 模板加载的,该模板使用带括号的输入名称在回发时生成数组。该项目是以这种方式构建的,因此可以在回发之前使用可排序的 jquery 对行进行排序。
<form id="the_form">
<input type="text" id="field1" name="options[]" /><br />
<input type="text" id="field2" name="options[]" /><br />
<input type="text" id="field3" name="options[]" /><br />
<input type="submit" value="submit" />
</form>
我的问题是 jquery validate 不能很好地处理包含括号的字段名称。有时它会验证,有时它会错过一两个字段。我一直在阅读很多其他帖子,说明这应该可以工作,我想知道我是否做错了什么或者是否有解决方法。
jQuery("#the_form").validate(
rules:
"options[]":
required: true
);
我创建了一个 jsFiddle,以便其他人可以看到我正在经历的事情。如果您运行 jsFiddle 并在表单中选择“提交”,您会立即注意到它只验证第一个字段,但是如果您通过选项卡浏览这些字段,您会看到不同的行为。谢谢!
http://jsfiddle.net/PV6j7/1/
【问题讨论】:
不是括号,而是它们都具有相同的名称。根据this SO question/answer,不支持这种行为。编辑 - 发布了一些解决方法here 你可能需要修改jquery验证插件jquery.validate.js
查看这个链接codeboss.in/web-funda/2009/05/27/…
@JasonP,没有解决方法,this answer 是错误的。 jQuery Validate 插件使用name
属性来跟踪输入,因此它们必须是唯一的。
谢谢大家!我不确定如何在不破坏 jquery 可排序的情况下解决此问题。至少我知道 jQuery validate 在我给他们唯一的名字之前不会起作用。
我没有看到任何特定的name
jQuery Sortable 要求。这如何打破它?
【参考方案1】:
那是因为它们目前都是同名的。
他们需要不同的名字才能工作
【讨论】:
【参考方案2】:引用:
"...我的问题是 jquery validate 不能很好地处理包含括号的字段名称。"
这是真的,但很容易用quotation marks 解决。但是,“括号”并不是真正的问题。
根本问题是如果每个字段上没有唯一名称,插件将无法正常运行。没有办法解决这个问题。
使用 jQuery $.each()
通过.rules('add')
方法分配规则在其他地方进行了讨论,但它被证明是一种可行的解决方法。那是因为根本问题不在于选择元素和分配规则;问题是插件使用name
属性来跟踪正在验证的元素。如果name
全部相同,这是不可能的。
failed jQuery .each()
demo
【讨论】:
【参考方案3】:试试这个:
jQuery("#the_form").validate(
rules:
"options":
required: true
);
【讨论】:
以上是关于使用带括号的 php 字段时,jQuery 验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 JQuery、Ajax、PHP、Json 进行表单验证