【问题标题】:jquery tokeninput with jquery validate required需要 jquery 验证的 jquery tokeninput
【发布时间】:2014-03-12 02:42:07
【问题描述】:

我有一个带有两个令牌输入文本框的表单 (ASP.NET MVC)。我还使用jquery.validate() 函数来验证这两个字段都是必需的。

我的问题是,所需的规则不适用于两个令牌输入字段中的 第一个(不管它是哪个;我测试了翻转这两个字段。)。

我确保将ignore = '' 设置为允许隐藏字段,因为令牌输入基本上将字段更改为无序列表和隐藏输入字段。

这真的很奇怪,但我真的很想要求这两个字段。 有什么想法吗?

这是我的代码:

HTML 代码:

<form id="SendPOSettingsForm" method="post" name="SendPOInfo" action="/po/SendPOToVendor/">
  <div>
    <table cellpadding="2">
      <tr>
        <td><input type="checkbox" class="sendviagroup" name="sendViaEmail" id="sendViaEmail" value="Y" @emailChecked /> <b>Email To:</b> &nbsp;&nbsp;&nbsp;</td>
        <td>
          <input type="text" name="sendPOEmailTo" id="sendPOEmailTo" style="font-family: arial; font-size:11px;"  />
          <input type="hidden" name="sendPOEmailTo_List" id="sendPOEmailTo_List" value="@emailTo" />
        </td>
      </tr>
      <tr>
        <td><input type="checkbox" class="sendviagroup" name="sendViaFax" id="sendViaFax" value="Y" onchange="UpdateAttnVisibility(this.checked);" @faxChecked /> <b>Fax To:</b> &nbsp;&nbsp;&nbsp;</td>
        <td>
          <input type="text" name="sendPOFaxTo" id="sendPOFaxTo" style="font-family: arial; font-size:11px;" />
          <input type="hidden" name="sendPOFaxTo_List" id="sendPOFaxTo_List"  value="@faxTo" />
        </td>
      </tr>
      <tr>
        <td><b>Subject:</b> &nbsp;&nbsp;&nbsp;</td>
        <td><input type="text" id="sendSubject" name="sendSubject" style="font-family: arial; font-size:11px; width:600px; height:25px;" /></td>
      </tr>
      <tr>
        <td valign="top"><b>Message:</b> &nbsp;&nbsp;&nbsp;</td>
        <td><textarea rows="10" cols="60" id="sendBody" name="sendBody" style="font-family: arial; font-size:11px;"></textarea></td>
      </tr>
    </table>
  </div>
  <div class="actions">
    <br />
    <input type="submit" id="bSendPO" value="&nbsp;&nbsp;Send&nbsp;&nbsp;" class="orangeButton2" style="font-weight:bold;" />
    &nbsp;&nbsp;
    <input type="button" value="&nbsp;&nbsp;Cancel&nbsp;&nbsp;" onclick="CancelSendPO();" class="orangeButton2" style="font-weight:bold;" />
    <ul class="errorclass" id="errorsummary"></ul>
  </div>
</form>

脚本代码:

$("#sendPOEmailTo").tokenInput("/Admin/Cron/GetVendorContactEmails.aspx?v=" + vendorNo, {
  theme: "facebook",
  preventDuplicates: true,
  allowFreeTagging: true
});

$("#sendPOFaxTo").tokenInput("/Admin/Cron/GetVendorContactFaxes.aspx?v=" + vendorNo, {
  theme: "facebook",
  preventDuplicates: true,
  allowFreeTagging: true
});

var formValidator = $("#SendPOSettingsForm").validate({
  ignore: "",
  rules: {
    sendPOFaxTo: {
      required: "#sendViaFax:checked" //only required if sendViaFax is checked
    },
    sendPOEmailTo: {
      required: "#sendViaEmail:checked" //only required if sendViaEmail is checked
    },
    sendSubject: {
      required: true
    },
    sendViaEmail: {
      require_from_group: [1, ".sendviagroup"]
    },
    sendViaFax: {
      require_from_group: [1, ".sendviagroup"]
    }
  },
  submitHandler: function (form) {
    //alert("is successful, no problems");
    form.submit();
  }
});

当我对此进行测试时,选中“传真”复选框但将“传真至”文本框留空即可。这给了我一条错误消息。但是,选中“电子邮件”复选框但将“电子邮件收件人”文本框留空会提交表单而不会给我一个错误! 如果我更改 HTML 的顺序并将两个传真输入放在电子邮件输入之前,则 FAX TO (sendPOFaxTo) 需要规则中断,而 EMAIL (sendPOEmailTo) 需要规则有效。

有什么建议吗?

【问题讨论】:

  • 试试required: $('#sendViaFax')[0].checked
  • jQuery Validate 的哪个版本?

标签: jquery jquery-validate jquery-tokeninput


【解决方案1】:

引用 OP:

“如果我更改 HTML 的顺序并将两个传真输入放在电子邮件输入之前,那么传真到 (sendPOFaxTo) 所需的规则中断,而电子邮件 (sendPOEmailTo) 所需的规则有效。 "

您正在使用 require_from_group 方法描述已知错误/问题的症状,该方法导致页面上的某些其他输入被忽略,具体取决于它们的位置。

解决方法是确保您使用的是最新版本的 jQuery 验证插件及其 additional-methods.js 文件,即 1.11.1。


此外,禁用ignore 选项的正确方法是,不要将其设置为'',而是将其设置为[]。看到这个答案:https://stackoverflow.com/a/8565769/594235

ignore: []

【讨论】:

  • 我正在使用 1.11.1 的验证和其他方法。但是,我使用的是相当旧的 jquery 版本。 (任何时候我尝试更新它,各种数据表功能都搞砸了,所以我把它保留到 jquery-1.6.2。
  • 另外,我试过忽略:[]。而且,我尝试将忽略放在验证器对象上。让我尝试取出 require_from_group 看看它是否有效。 (我非常确定这是导致问题的令牌输入。)如果取出 require_from_group 使其工作,也许我可以对两个复选框进行基本依赖,如果另一个未选中则需要它。让我试试。我会在一分钟内回复你。
  • 太棒了!你太棒了!!!是的,取出 required_from_group 工作。相反,我使用“必需:依赖”如下:
  • 哎呀,我在输入代码之前按了 Enter:

    sendViaEmail: { //required: [1, ".sendviagroup"] required: {depends: function(element ) { if ($('#sendViaFax').is(':checked')){ return false; } 其他{ 返回​​真; } } } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多