为什么jQuery验证没有';工作不可靠?

为什么jQuery验证没有';工作不可靠?,jquery,validation,Jquery,Validation,有时会出现不引人注目的验证,有时不会 只有当我显式调用表单的valid()函数(在提交期间完成)时,不引人注目的验证才能可靠地工作 为什么会这样 守则: <script src="jquery-1.5.1.min.js" type="text/javascript"></script> <script src="jquery.validate.min.js" type="text/javascript"></script> <script s

有时会出现不引人注目的验证,有时不会

只有当我显式调用表单的valid()函数(在提交期间完成)时,不引人注目的验证才能可靠地工作

为什么会这样

守则:

<script src="jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="jquery.validate.min.js" type="text/javascript"></script>
<script src="jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<form action="/User/Input" id="fxUser634377199694370000" method="post">    
  <fieldset>
    <legend>Person</legend>
    <div class="editor-label">
      <label for="Firstname">Firstname</label>
    </div>
    <div class="editor-field">
      <input class="text-box single-line" data-val="true" data-val-required="The Firstname field is required." id="Firstname" name="Firstname" type="text" value="" />
      <span class="field-validation-valid" data-valmsg-for="Firstname" data-valmsg-replace="true"></span>
    </div>
    <div class="editor-label">
      <label for="Lastneim">Lastneim</label>
    </div>
    <div class="editor-field">
      <input class="text-box single-line" data-val="true" data-val-required="The Lastneim field is required." id="Lastneim" name="Lastneim" type="text" value="" />
      <span class="field-validation-valid" data-valmsg-for="Lastneim" data-valmsg-replace="true"></span>
    </div>
    <div class="editor-label">
      <label for="Age">Age</label>
    </div>
    <div class="editor-field">
      <input class="text-box single-line" data-val="true" data-val-number="The field Age must be a number." data-val-required="The Age field is required." id="Age" name="Age" type="text" value="" />
      <span class="field-validation-valid" data-valmsg-for="Age" data-valmsg-replace="true"></span>
    </div>
    <p>
      <input type="submit" id='fxUser634377199694370000_Saver' value="Save" />
    </p>
  </fieldset>
</form>

<script type="text/javascript">
  $(function () {
    $('#fxUser634377199694370000_Saver').click(function (e) {
      e.preventDefault();
      if ($('#fxUser634377199694370000').valid())
        ;
      else {
        alert('not ok');
        return;
      }
      alert($('#fxUser634377199694370000').serialize());
    });
  });
</script>

人
名字
拉斯奈姆
年龄

$(函数(){ $('fxUser634377199694370000_Saver')。单击(函数(e){ e、 预防默认值(); if($('#fxUser634377199694370000').valid() ; 否则{ 警报(“不正常”); 返回; } 警报($('#fxUser634377199694370000').serialize(); }); });
功能代码、SAN服务器代码、仅html和客户端(jquery库):

例如:“在一个字段被标记为无效之前,验证是惰性的:在第一次提交表单之前,用户可以在字段中进行制表,而不会收到恼人的消息-在他有机会实际输入正确的值之前,他不会被窃听”


这就是您的问题所在吗?

正如文档所说,在第一次调用valid()之前,验证都是惰性的


一个解决方法是自己调用valid()方法:通常我会对延迟验证感到满意,但在一个非常特定的应用程序上,情况并非如此。受@Peeter的启发,我调用了如下验证:

$("#wep_key_register_test_second").focus(function() {
    $("#wep_key_register_test_second").valid();
});

然后让插件正常工作。

好吧,除了ckeditor(总是要点击两次)之外,对我来说似乎很有效你必须给我们更多。一些代码和一种复制方法的描述。系统的工作方式是这样的。验证分为两种情况。1.onSubmit=>所有内容都会重新验证!.2.对带有活动错误消息的字段onBlur=>该字段会重新验证。你得到不同的结果吗?我也在体验对这种行为进行了分类。它仍然存在于jquery.validate 1.9.0和jquery 1.8.3中。似乎已经提出了一个修复方案,但由于引入了另一个bug而被恢复。RARPSL的评论提出了一个修复方案,但我无法理解如何实现他所描述的。可以吗?我尝试在文本框中输入文本并尝试删除输入的值,我想即使我没有点击“提交”按钮,这种不引人注目的验证也已经开始了。这是预期的行为。用户可以编辑表单,直到它符合她的意思,然后她点击“提交”并验证输入。从那一刻起,输入字段被急切地验证。一旦字段的内容有效,错误消息就会显示出来消失,然后内容被无效编辑时,它再次出现。请尝试在Firstname和Lastname上输入值,然后tab到Age,然后tab到Firstname并删除其值,验证未生效。为Firstname输入值,省去Lastname。单击“提交”。验证现在应将Lastname标记为丢失。然后删除value表示Firstname(可能留下/blur Firstname,不确定),那么验证也应该标记Firstname。根据文档,这就是为什么要标记Firstname。您有不同的体验吗?(谈论jquery插件/验证)@郝:我在IE8中也注意到了同样的问题。你找到解决办法了吗?我以为我做错了什么,但这似乎是个错误。我已经在我的问题上说过“只有当我显式调用表单的valid()函数(在提交过程中完成)时,不引人注目的验证才能可靠地工作。”“我只是对在单击submit(或调用valid())之前验证的不一致性感到困惑。这样看来,在实际调用valid()方法之前,表单将不会进行任何验证。方法被调用后,验证就开始了。即使我这样看待它,现实告诉我们的是相反的。即使在jquery的ready上删除了valid(),它仍然有验证,尝试输入Firstname、Lastneim、Age上的值,然后尝试逐个删除它们,如果所有的值都没有验证,我也不会感到麻烦,但是Lastneim是验证的;正是这种前后矛盾使我难以置信。虽然在jquery的ready上调用valid()会使事情保持一致,但从美学角度看,这看起来并不好