jQuery验证程序自定义方法未定义*有时*

时间:2018-09-28 14:50:48

标签: jquery webpack jquery-validate sentry

我偶尔会在Sentry中收到一个奇怪的错误消息,即我们的自定义jQuery验证器方法之一未定义。但是,这应该是不可能的-我们正在使用webpack捆绑脚本,并且自定义方法与jQuery和验证器捆绑在同一捆绑中。

这是一个非常罕见的错误,触发它的设备中有75%是iPad。我想忽略它,但它一直困扰着我。这怎么可能发生?

这是细节...

  • 自定义方法称为“ NoPOBoxes”
  • Sentry报告的特定错误是:“无法读取未定义的属性'call'。检查元素BillAddress2,检查'NoPOBoxes'方法时发生异常。”
  • 导致错误的行是:result = $.validator.methods[ method ].call( this, val, element, rule.parameters );

Webpack正在为我们创建两个包,一个是主包,另一个是子包:

webpack.config.js:

module.exports = {
    entry: {
        "main": [ "./dev/config/main.js" ],
        "sub": [ "./dev/config/sub.js" ]
....

main.js(相关部分):

require('jquery');
require("../source/jQueryPlugins/Validator/1.17.0");
require("../source/jquery.validate.1.17.0.CustomMethods");

其他所有内容都很标准,sub.js负责设置验证器和所有规则等。这些脚本(main.js和sub.js)包含在页面底部,如下所示:

<script type="text/javascript" src="/includes/bundles/dist/main.js"></script>
<script type="text/javascript" src="/includes/bundles/dist/sub.js"></script>

此外,sub.js具有最后一个故障保护功能。在执行任何操作之前,它会检查是否已定义jQuery。因此,由于jQuery,验证器和我们的自定义验证器方法都在main.js中定义-这应该意味着,如果定义了jQuery,则将定义验证器和验证器的自定义方法。

(function() {
    var jQueryLoading = setInterval(function() {
        if (typeof($) === "function") {
            clearInterval(jQueryLoading);
            $(document).ready(function(){
                // do stuff
            });
        }
    }, 100);
})();

谁能看到我是否想念东西?

0 个答案:

没有答案