使用RequireJS时,为什么我同时收到“$ jQuery val is undefined”和“$ .validator.unobtrusive is undefined”?

时间:2012-08-18 17:37:12

标签: javascript jquery validation requirejs unobtrusive

这让我困惑了几个小时了。当脚本在非requirejs javascript文件中时,它可以正常工作。当我将它与RequireJS一起使用时,它无法工作并在问题标题中给出了错误消息(尽管是firebug控制台)。

在尝试重构模块之前,我只是试图让它与RequireJS一起“工作”。

Html正确呈现。脚本正确加载。另外,我正在使用require-jquery.js包下载,它在所有页面的布局模板中引用。

main.js

require.config({
   paths: {
       "maximum-filesize": "modules/validation/maximum-filesize"
   }
});

require(["maximum-filesize", "domReady!"], function (maxFileSize) {
});

最大filesize.js

require.config({
paths: {
    "jquery-validate": "libs/jquery/jquery.validate",
    "jquery-validate-unobtrusive": "libs/jquery/jquery.validate.unobtrusive"
    }
});

define(["jquery", "jquery-validate", "jquery-validate-unobtrusive", "domReady!"], function ($) {

    $.validator.unobtrusive.adapters.add(
        'filesize', ['maxsize'], function(options) {
            options.rules['filesize'] = options.params;

            if (options.messages) {
                options.messages['filesize'] = options.message;
            }
        });

        $.validator.addMethod('filesize', function (value, element, params) {
        if (element.files.length < 1) {
            // No files selected
            return true;
        }

        if (!element.files || !element.files[0].size) {
            // This browser doesn't support the HTML5 API
            return true;
        }

        return element.files[0].size < params.maxsize;
        }, '');
});

修改1

我只是尝试评论出上述所有代码,并将其替换为简单的代码:

 $('#Name').val("Hello");

这在#Name文本框中正确呈现了“Hello”,因此JQuery正在运行。

1 个答案:

答案 0 :(得分:2)

你应该使用requires shim选项来告诉需要在jquery validate之前加载jquery。否则加载顺序未定义。

另一个可能的问题是调用requirejs.config 2次。 Requirejs在合并配置方面存在问题