多部分表单验证

时间:2012-06-14 17:16:59

标签: jquery validation jquery-plugins

所以我有一个包含文本,整数和文件上传字段的多部分表单 我可以对text和int字段使用dataAnnotations和validationMessageFor,但不能用于文件上载。 所以我实现了以下代码来验证文件上传:

$(document).ready(function() {
          $("#Error").hide();
          var pdfFile = '<%=Model.PdfFile %>';
          if (pdfFile == null || pdfFile1 == "") {
              $("#Submit").click(function() {
                  var ext = $('#File').val().split('.').pop().toLowerCase();
                  var file = $('#File').val();
                  if ((!file || ext != 'pdf')) {
                      $('#Error').show();
                      return false;
                  }
                  return true;
              });
          }
      });

这个代码工作得很好,据我所知,但它在检查其他字段之前执行,所以它看起来很草率。 换句话说,如果用户在单击提交时在表单上有多个错误, 将显示文件上载的验证消息,但不会显示其他字段。 如果用户随后上载了有效文件并再次单击“提交”,则会显示其他字段的验证消息。马虎。 所以我也尝试为文本框实现jQuery验证,但由于某种原因,这不起作用:

$(document).ready(function () {
          $("#captionVal").hide();
          $("#Submit").click(function () {
              var caption = $("#Caption").val();
             if (!caption || caption == "") {
                  $("#captionVal").show();
                  return false;
              }
              return true;

          });
      });

它似乎总是将该字段读为null,因此它永远不会返回true。

我尝试添加

$("Caption").change(function() {

以及

$("#Caption").bind(function() {

在if语句前面,但无济于事。

我也尝试过使用jQuery验证

$(document).ready(function () {
         $("#term").validate();
      });

但这根本没有做任何事情(也许我只是不明白如何使用插件?)

所以我的问题是,如何验证文本框? 我真正需要做的就是确保它们不是空的,如果它们在提交点击时显示错误标签(不是弹出窗口) 或者我如何使用验证插件?我已经下载了.zip文件并添加了(&amp;引用).validate.js文件,但是 .validate方法似乎什么都没做?

1 个答案:

答案 0 :(得分:4)

确保您的表单字段具有name属性,并且您要在插件声明期间或通过内置类功能指定验证规则。

此外,您可以将自定义验证方法添加到插件中,并像使用内置的那样使用它:

示例:

<html>
<head>
   <script src="path/to/jquery.js">
   <script src="path/to/jquery-validator.js">
   <script>
    // Add a custom method for file validation (going off your logic - haven't tested)
    jQuery.validator.addMethod("file", function(value, element) { 
        var ext = value.split('.').pop().toLowerCase();
        return (!value || ext != 'pdf');
    }, "Please make sure your file has a valid PDF extension");

    // This will make the form pass all validation checks on submit and 
    //  display errors if any occur
    $('#myForm').validate();
   </script>
</head>
<body>
   <form id="myForm">
      <input type="text" name="email" class="required email" />
      <input type="text" name="username" class="required" />
      <input type="text" name="file" class="required file" />
      <input type="submit" value="Submit form and get your ass validated!" />
   </form>
</body>
</html>

自定义验证方法参考:http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage

编辑:注意到该插件内置了一个文件扩展名验证方法: http://docs.jquery.com/Plugins/Validation/Methods/accept#extension

编辑2:以下是如何在不使用自定义方法的情况下进行验证(使用我刚刚找到的内置方法):

<input type="text" name="file" />

    $('#myForm').validate({
         rules: {
            file: {
                required: true,
                accept: "pdf"
             }
         }
    });