我正在尝试在jquery验证插件中获取全局变量的值。
var typedWords = 1;
jQuery.validator.addMethod("wordCount",
function(value, element, params) {
typedWords = jQuery.trim(value).split(' ').length;
console.log(typedWords);
if (typedWords >= params[0] && typedWords <= params[1]) {
return true;
}
},
jQuery.format("Only {0} to {1} words allowed. You have entered " + typedWords + " words.")
);
但jQuery.format("Only {0} to {1} words allowed. You have entered " + typedWords + " words.")
中的typedWords值始终为undifined
。
我想如何获得typedWords = jQuery.trim(value).split(' ').length;
的价值?
感谢。
答案 0 :(得分:1)
查看控制台错误,它告诉我$.format
中的jquery.validate.js
已被弃用。只需将$.format
更改为$.validator.format
,或者在您的情况下......
jQuery.validator.format("Only {0} to {1} words allowed. You have entered " + typedWords + " words.")
(根本不再需要在$.validator.format()
中包装自定义消息,因为完全没有任何区别。)
它现在有效,但typedWords
变量永远不会更新超出您在全局定义的1
。这是因为一旦您初始化了自定义方法,可以动态更改的自定义消息的唯一部分就是{0}
和{1}
处的参数。
DEMO:http://jsfiddle.net/JRgN7/
但是,如果您将typedWords
分配给另一个名为params[2]
的参数,则可以在邮件中使用{2}
并正确更新自己。
var typedWords = 1;
jQuery.validator.addMethod("wordCount", function (value, element, params) {
typedWords = jQuery.trim(value).split(' ').length;
params[2] = typedWords;
console.log(typedWords);
if (typedWords >= params[0] && typedWords <= params[1]) {
return true;
}
},
jQuery.validator.format("Only {0} to {1} words allowed. You have entered {2} words."));
DEMO:http://jsfiddle.net/JRgN7/1/
现在我们可以使用params[2]
并完全删除全局typedWords
变量。此外,没有必要将自定义消息放在jQuery.validator.format()
内。
jQuery.validator.addMethod("wordCount", function (value, element, params) {
params[2] = jQuery.trim(value).split(' ').length;
if (params[2] >= params[0] && params[2] <= params[1]) {
return true;
}
},
"Only {0} to {1} words allowed. You have entered {2} words.");
最终工作演示:http://jsfiddle.net/JRgN7/3/