在-jquery.validate中定义全局变量不起作用

时间:2014-05-27 08:03:39

标签: javascript jquery jquery-validate

我正在尝试在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;的价值?

感谢。

1 个答案:

答案 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/