0

我正在使用jquery-steps 插件。现在我正在尝试检查文件扩展名是否为 .jpg。除了文件类型检查外,一切正常。它接受一切,但不应该

$("#passportForm").steps({
         headerTag: "h1",
         bodyTag: "fieldset",
         enableFinishButton: false,
         transitionEffect: "fade",
         stepsOrientation: "vertical",
         onStepChanging: function (event, currentIndex, newIndex) {
             // Always allow going backward even if the current step contains invalid fields!
             if (currentIndex > newIndex) {
                 return true;
             }

             var form = $(this);

             // Clean up if user went backward before
             if (currentIndex < newIndex) {
                 // To remove error styles
                 $(".body:eq(" + newIndex + ") label.error", form).remove();
                 $(".body:eq(" + newIndex + ") .error", form).removeClass("error");
             }

             // Disable validation on fields that are disabled or hidden.
             form.validate({
                 rules: {field: {required: true,extension: "jpeg|jpg"}}***,
                 errorPlacement: function (error, element) { }
             }).settings.ignore = ":disabled,:hidden";

             // Start validation; Prevent going forward if false
             return form.valid();
         },
         onStepChanged: function (event, currentIndex, priorIndex) {

         },
         onFinishing: function (event, currentIndex) {
             var form = $(this);

             // Disable validation on fields that are disabled.
             // At this point it's recommended to do an overall check (mean ignoring only disabled fields)
             form.validate({ errorPlacement: function (error, element) { } }).settings.ignore = ":disabled";

             // Start validation; Prevent form submission if false
             return form.valid();
         },
         onFinished: function (event, currentIndex) {
             var form = $(this);

             form.submit();
         }
     });

我还需要检查文件大小。它必须小于 3mb。第三个问题是,当我们单击快速下一步按钮时,它会在没有验证的情况下传递到下一步

4

1 回答 1

2

您的方法(使用 jQuery Validate 插件)完全有缺陷....

$("#passportForm").steps({
    ....
    onStepChanging: function (event, currentIndex, newIndex) {
         ....

         var form = $(this);
         ....

         // Disable validation on fields that are disabled or hidden.
         form.validate({
             rules: {field: {required: true,extension: "jpeg|jpg"}}***,
             errorPlacement: function (error, element) { }
         }).settings.ignore = ":disabled,:hidden";

         // Start validation; Prevent going forward if false
         return form.valid();
     },
     ....
     onFinishing: function (event, currentIndex) {
         var form = $(this);

         // Disable validation on fields that are disabled.
         // At this point it's recommended to do an overall check (mean ignoring only disabled fields)
         form.validate({ errorPlacement: function (error, element) { } }).settings.ignore = ":disabled";

         // Start validation; Prevent form submission if false
         return form.valid();
     },
     ....
 });

您不能随时.validate()用一组新的选项简单地调用。

根据您的代码注释,您似乎还认为您调用validate()以按需触发验证......这不是它的工作原理。

.validate()方法仅用于在页面加载时初始化表单上的插件一次。一旦被调用(并初始化),对该方法的任何后续调用都将.validate()被忽略。

如果您有一个已经用 初始化的表单.validate(),您可以随时调用该.valid()方法来触发验证测试。

如果您需要“开始/停止”或切换验证,则不能。但是,您可以使用该.rules()方法模拟类似的事情。您可以调用.rules('remove')所有input元素来删除所有验证规则,从而有效地删除任何验证检查。然后,您可以调用.rules('add', { /* your rules */ })任何input元素将规则放回原处,从而有效地再次进行验证。

尽管允许添加/删除规则,但一旦通过调用.validate().

于 2014-03-12T23:04:00.650 回答