2017-05-31 45 views
0

更通用的我有大量的这种类型的脚本的:使脚本用于表单验证

// xx is the module name and will be different 
$('[data-target="xx"]').validate({ 
    ignore: '', 
    rules: { 
     ORI_Text: { 
      required: true 
     } 
    }, 
    submitHandler: function(form) { 
     var formData = new FormData(form); 
     saveFormDatas(form); 
     return false; 
    } 
}); 

我怎样才能让submitHandler部分一般为我所有的验证脚本,因为它是一样的吗?

谢谢。

回答

0

您可以简单地创建一个函数,因为您拥有的代码不依赖于任何外部状态,只能根据给定的参数进行操作。

// this is now abstracted and you can pass it as the callback to many validations. 
function onSubmit(form) { 
    var $input = $(this) // if you need a reference to the validated element 
    var formData = new FormData(form); 
    saveFormDatas(form); 
    return false; 
} 
$('[data-target="xx"]').validate({ 
    ignore: '', 
    rules: { 
     ORI_Text: { 
      required: true 
     } 
    }, 
    submitHandler: onSubmit // the function is passed by reference 
}); 
+0

非常感谢。有用。两个问题给你。为什么'onSubmit'不是'onSubmit()'?第二个是'var input = $(this)',我得到了什么?谢谢。 –

+0

您正在将该函数的引用作为回调函数传递。 JavaScript通过引用传递所有对象和数组以节省内存,所以你可以重新使用你的'onSubmit'函数。如果你有了括号,你会叫它。 'onSubmit()'不会将函数传递给'validate'回调函数。 'onSubmit'函数中的'this'将被设置为您正在验证的HTMLFormElement'[[data-target =“xx”]“”。以防您需要从已验证的元素获取信息,或者想要查找与其相关的其他元素,例如。用于通知或错误消息。 – synthet1c

+0

它被包装成一个jQuery对象,方便'$(this)'。你可以做一些类似'$ input.css({background:'red'})' – synthet1c

0

你可以使用原型(也许):

var someproto={ 
ignore: "", 
rules: { 
    ORI_Text: { 
     required: true 
    } 
}, 
submitHandler: function(form) { 
    var formData = new FormData(form); 
    saveFormDatas(form); 
    return false; 
} 
} 

function some(rules){ 
    return Object.assign(Object.create(someproto),rules); 
} 

可用这样的:

$('[data-target="xx"]').validate(some({ignore:"a"})); 

一些到的jQuery使得它更容易使用:

jQuery.fn.some=function(rules){ 
this.validate(some(rules)); 
}; 

适用如下:

$('[data-target="xx"]').some({ignore:"a"}); 
+0

我怎样才能改变字段来验证? –

+0

@ catatari:什么?我没有明白你的观点 –

+0

规则部分应该并且需要为每个重复脚本改变。它只是修复了'submitHandler'。 –