使用带括号的 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 验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

调用不带括号的函数时如何传递参数[Javascript]

在字段纯PHP退出时验证输入字段

使用 JQuery、Ajax、PHP、Json 进行表单验证

将 jQuery 验证规则添加到动态生成的表单元素时出错

ASP.NET Web 窗体 - 通过 jquery 填充字段时客户端验证不起作用?

Jquery 验证插件。在字段失去焦点之前消息不可见