jQuery1.7升级2.2.2调用resizeGrid提示未初始化报错如何解决
问题原因
- 报错核心是你尝试在名为
a的jQuery插件完成初始化前,就调用它的resizeGrid方法。jQuery 1.7对这类非法调用的容错性更高,升级到2.2.2后收紧了校验规则,必须先完成插件初始化才能调用对应方法。 - 你尝试的
$('#containerGrid_0').a().a('resizeGrid')无效,是因为无参数调用a()不符合该插件的初始化规则,没有完成实际的初始化流程。
解决方案
方案1:先初始化再调用方法
确认a插件的初始化参数要求,先传入必填参数完成初始化,再调用方法:
var b ={ manipulateGrid: function(){ // 先完成初始化,根据插件要求传入配置参数 $('#containerGrid_0').a({ // 此处填写插件初始化需要的配置项 }); // 再调用方法 $('#containerGrid_0').a('resizeGrid'); } }
方案2:直接调用全局对象方法
如果你定义的a本身是全局普通工具对象,不需要绑定DOM上下文,直接去掉jQuery调用语法即可:
var b ={ manipulateGrid: function(){ a.resizeGrid(); } }
方案3:扩展jQuery方法兼容旧逻辑
如果要最小化修改原有代码,可以扩展jQuery方法自动兜底初始化逻辑:
// 扩展jQuery的a方法 $.fn.a = function (method) { // 检测是否已经初始化,未初始化则自动执行初始化 if (!$(this).data('a-inited')) { // 此处填写a插件的初始化逻辑 $(this).data('a-inited', true); } // 调用对应方法 if (typeof a[method] === 'function') { return a[method].apply(this, Array.prototype.slice.call(arguments, 1)); } $.error('Method ' + method + ' does not exist on jQuery.a'); };
内容的提问来源于stack exchange,提问作者user5761780
相关产品推荐
相关产品推荐

