javascript - 单选按钮上的不显眼验证被忽略,而它仅适用于相同表单 html 中的文本字段

标签 javascript jquery html unobtrusive-validation unobtrusive-javascript

我正在测试具有 Unobtrusive 验证的表单,其背后没有运行 MVC Controller 并且 html 是手写的,仅用于测试(找出它为什么不起作用)而不用于生产。

当提交表单时,单选按钮没有任何反应(没有错误消息,就像没有任何验证一样),而相同表单中的文本字段会给出验证错误。

我已经放弃了我能想到的任何东西,示例只需要验证器单选按钮和错误消息范围,仅此而已,它仍然无法正常工作。

我肯定在这里遗漏了一些明显的东西,当有人指出我的错误时,我可能会觉得自己像个白痴,但我仍然不能花更多的时间在这上面。

<form>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
  <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"></script>
  <script src="https://ajax.aspnetcdn.com/ajax/mvc/5.0/jquery.validate.unobtrusive.min.js"></script>
  <div class="quote-form__question fl--title">
    <div class="split-input--left">
      <input class="tooltip form-control input " data-val="true" data-val-length="Please enter a firstname with no more than 20 characters" data-val-length-max="20" data-val-regex="Please enter First name with letters only" data-val-regex-pattern="^ *?[a-zA-Z]+[ a-zA-Z-_']*$"
      data-val-required="Please enter your first name" id="CustomerFirstname" maxlength="20" name="CustomerFirstname" placeholder="Name" tabindex="" type="text" value="">
      <div class="field-validation-error-container">
        <span class="field-validation-valid field-validation-error" data-valmsg-for="CustomerFirstname" data-valmsg-replace="true"></span>
      </div>
    </div>
  </div>
  <div class="label-row-full-width">
    <label for="q1-1" class="label--un-checked">
      <span>Mr</span>
      <input type="radio" class="js-check-style js-toggle-question js-show-button" data-val-required="Please select title" name="CustomerTitle" id="q1-1" data-val="Mr" value="Mr">
    </label>
    <label for="q1-2" class="label--un-checked">
      <span>Mrs</span>
      <input type="radio" class="js-check-style js-toggle-question js-show-button" data-val-required="Please select title" name="CustomerTitle" id="q1-2" data-val="Mrs" value="Mrs">
    </label>
    <label for="q1-3" class="label--un-checked">
      <span>Miss</span>
      <input type="radio" class="js-check-style js-toggle-question js-show-button" data-val-required="Please select title" name="CustomerTitle" id="q1-3" data-val="Miss" value="Miss">
    </label>
    <label for="q1-4" class="label--un-checked">
      <span>Ms</span>
      <input type="radio" class="js-check-style js-toggle-question js-show-button" data-val-required="Please select title" name="CustomerTitle" id="q1-4" data-val="Ms" value="Ms">
    </label>
    <span class="field-validation-valid" data-valmsg-for="CustomerTitle" data-valmsg-replace="true"></span>
  </div>
  <input type="submit" value="submit" />
  </div>
</form>

我错过了什么?

最佳答案

经过一些调查。

我必须做的 - 在后端引入自定义验证器属性 ( which I believe is out of scope for question, yet worth linking to )。
这就是它归结为仅前端解决方案的原因。

  1. 更改单选按钮属性 data-val-requireddata-val-something

  2. 加载 jquery 和验证脚本后注册适配器

    <script type="text/javascript" language="javascript"> $.validator.unobtrusive.adapters.addBool("something", "required"); </script>

下面是工作示例:

<form>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
  <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"></script>
  <script src="https://ajax.aspnetcdn.com/ajax/mvc/5.0/jquery.validate.unobtrusive.min.js"></script>
  <script type="text/javascript" language="javascript">
    $.validator.unobtrusive.adapters.addBool("mandatory", "required");
  </script>
  <div class="label-row-full-width">
    <label for="q1-1" class="label--un-checked">
      <span>Mr</span>
      <input type="radio" class="js-check-style js-toggle-question js-show-button valid" data-val-mandatory="Please select title" name="CustomerTitle" id="q1-1" data-val="true" value="Mr">
    </label>
    <label for="q1-2" class="label--un-checked">
      <span>Mrs</span>
      <input type="radio" class="js-check-style js-toggle-question js-show-button valid" data-val-mandatory="Please select title" name="CustomerTitle" id="q1-2" data-val="true" value="Mrs">
    </label>
    <label for="q1-3" class="label--checked">
      <span>Miss</span>
      <input type="radio" class="js-check-style js-toggle-question js-show-button valid" data-val-mandatory="Please select title" name="CustomerTitle" id="q1-3" data-val="true" value="Miss">
    </label>
    <label for="q1-4" class="label--un-checked">
      <span>Ms</span>
      <input type="radio" class="js-check-style js-toggle-question js-show-button valid" data-val-mandatory="Please select title" name="CustomerTitle" id="q1-4" data-val="true" value="Ms">
    </label>
    <span class="field-validation-valid" data-valmsg-for="CustomerTitle" data-valmsg-replace="true"></span>
  </div>
  <input type="submit" value="submit" />
</form>

希望这能为您节省一些时间。

关于javascript - 单选按钮上的不显眼验证被忽略,而它仅适用于相同表单 html 中的文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33610875/

相关文章:

javascript - JQuery 在鼠标单击时显示和隐藏 div(动画)

javascript - 单击链接后在同一页面上打开一个窗口

Java 在没有正则表达式的情况下从 String 中删除 HTML

javascript - 如何在我的 Node.js 服务器上验证 GKLocalPlayer

javascript - 引用错误: function is not defined

javascript - jQuery text() 和 show() 不起作用(RoR 应用程序)

html - 如果设置了 child min-with 则防止 div 折叠

javascript - 如何关闭用python制作的chrome native 应用程序?

javascript - JQuery - 查找未包含在标签中的文本

javascript - 在表格中滚动标签