VS2017迁移认证应用时jQuery3.3.1+jqGrid3.5控制台报错求助
解决jqGrid 3.5 + jQuery 3.3.1 控制台报错问题
兄弟,我一眼就瞅出问题大概率出在版本兼容性冲突上——jqGrid 3.5 是个超级老的版本(差不多2009年的产物),而 jQuery 3.3.1 是2018年的版本,两者的API差异太大了,很多jqGrid 3.5依赖的旧jQuery特性在3.x里要么被移除要么改了行为。下面给你几个可行的解决方向:
1. 最省心的方案:降级jQuery到兼容版本
jqGrid 3.5 官方适配的是 jQuery 1.3.x ~ 1.4.x 版本,你可以直接把当前的 jQuery 3.3.1 换成 jQuery 1.4.4(这个版本和jqGrid3.5兼容性拉满):
- 替换页面里的jQuery引入脚本:把
<script src="jquery-3.3.1.min.js"></script>改成<script src="jquery-1.4.4.min.js"></script> - 注意顺序:一定要先引入jQuery,再引入jqGrid的JS和CSS文件
2. 硬刚到底:修复jqGrid 3.5的兼容性问题(不降级jQuery)
如果项目必须用jQuery 3.x,那得手动给jqGrid打补丁,补全它依赖的旧jQuery特性:
- 修复
$.browser缺失问题:jQuery 3.x 直接移除了$.browser,你可以在引入jqGrid之前加这段polyfill代码:(function(jQuery){ if (!jQuery.browser) { var ua = navigator.userAgent.toLowerCase(); jQuery.browser = { version: (ua.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1], safari: /webkit/.test(ua), opera: /opera/.test(ua), msie: /msie/.test(ua) && !/opera/.test(ua), mozilla: /mozilla/.test(ua) && !/(compatible|webkit)/.test(ua) }; } })(jQuery); - 修复属性获取/设置的差异:jQuery 3.x 里
$.attr()的行为和1.x不同(比如获取checkbox的checked会返回字符串而非布尔值),你需要找到jqGrid源码中用$.attr()的地方,改成$.prop()或者适配新的返回值逻辑。 - 修复事件绑定问题:jqGrid 3.5 可能用了
bind()/unbind()这类旧事件方法,你可以把源码里的bind替换成on,unbind替换成off。
3. 精准定位:先看控制台具体错误
你没贴出控制台的具体报错内容,比如是$.browser is undefined还是XX方法不存在?如果能把错误信息贴出来,能更快解决问题。举个例子:
- 如果报错是
$.browser is undefined:直接用上面的polyfill就能解决 - 如果报错是
$.fn.live is not a function:要么补live()的polyfill,要么把live替换成on
4. 长远方案:升级jqGrid版本
jqGrid 3.5实在太老了,不仅兼容性差,还有很多已知bug。如果项目允许,建议升级到free-jqGrid(这是jqGrid的开源维护分支,一直更新到现在),它完美兼容jQuery 3.x,还能获得分页、筛选等新特性,后续维护也更省心。
内容的提问来源于stack exchange,提问作者Patrice
相关产品推荐
相关产品推荐

