非常简单的例子,我在'required'中使用应该在实际表单验证上运行的函数,但它也会在页面加载时执行。
问题是如何避免它并且这样做只会在实际验证时调用其他函数。
$("form").validate({
rules : {
testinput: {
required: runFunction('hello world')
}
});
function runFunction(a){
console.log(a);
}
答案 0 :(得分:1)
您需要将函数调用包装在另一个函数中:
$("form").validate({
rules : {
testinput: {
required: function(el) {
runFunction('hello world')
}
}
});
});
原因是因为runFunction
返回的值被设置为加载时required
属性的值。使用上面的代码,您将为required
属性分配一个函数,该函数仅在验证时运行。
答案 1 :(得分:1)
required callback
中的呼叫功能,
$("form").validate({
rules : {
testinput: {
required: function(){ runFunction('hello world');
}
}
});
答案 2 :(得分:1)
另一种方式是使用某种部分应用
请参阅:Partial Application - Eloquent Javascript
您的代码可能属于以下几行:
$("form").validate({
rules : {
testinput: {
required: partial(runFunction,'hello world')
}
});
partial(runFunction,'hello world')
创建一个与runFunction('hello world')等效的新函数。
这是一个来自函数式编程的强大概念,而JS可以扩展为支持这样的事情。
编辑:1可能是部分申请的更好解释
http://www.drdobbs.com/open-source/currying-and-partial-functions-in-javasc/231001821