本文仅记录实际开发时遇到的一些jq升级兼容的问题,有则改之,无则加勉。
1. $.browser.msie报错,$.browser.msie 为空或不是对象的问题
报错信息:
Uncaught TypeError: Cannot read properties of undefined (reading 'msie')
解决方案:
既然不支持,那就不用$.browser.msie来判断,直接替换即可。
$.browser.mozilla = /firefox/.test(navigator.userAgent.toLowerCase());
$.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase());
$.browser.opera = /opera/.test(navigator.userAgent.toLowerCase());
$.browser.msie = /msie/.test(navigator.userAgent.toLowerCase());
2. $(window).load()报错
报错信息:
我这边保存的原因是使用了插件,而插件中使用了$(window).load(),
$(window).load(function(){})
解决方案:
直接替换为$(document).ready()
$(document).ready(function(){})
报错信息为
jquery 3.3.1版本报错TypeError: e.indexOf is not a function,这是因为$(window).load方法已经废弃。
$(window).load(function(){});
修改为:
$(window).on(‘load’,function(){});
3. window.showModalDialog报错
报错信息:
Uncaught TypeError: window.showModalDialog is not a function
window.showModalDialog(url,arr,'dialogHeight:600px;dialogWidth:1000px')
解决方案:
自己重新封装了新的open方法,兼容ie和谷歌
// 父页面
windowOpen(url,arr,1000,600, callback)
function callback(idAndNames) {
// 窗口关闭之后回调 idAndNames为关闭时子窗口传参
if(idAndNames!=null){
console.log(idAndNames,'__idAndNames')
}
}
// 自定义open弹窗
function windowOpen(_url, arr , width, height, fn){
returnValue = null;
if(navigator.userAgent.indexOf("Chrome") >0 ){
var iTop = (window.innerHeight - height) / 2 ;
var iLeft = (window.innerWidth - width) / 2 ;
var x = (window.screenX || window.screenLeft || 0) + (iLeft || 0);
var y = (window.screenY || window.screenTop || 0) + (iTop || 0);
var _winOpen = window.open(_url,arr,"height="+height+",width="+width+",status=no,help=no,left="+x+",top="+y+"");
var loop = setInterval(function (){ // 使用定时器查询当前状态
if (_winOpen && _winOpen .closed) { // 进行判断条件 closed属性就是返回当前窗口的状态
clearInterval(loop); // 清除定时器
if(returnValue) fn(returnValue)
}
}, 500);
}else{
var _winOpen = window.showModalDialog(_url,arr,"dialogWidth:"+width+"px;dialogHeight:"+height+"px;status:0;help:no;");
if(_winOpen!='close'){
fn(_winOpen)
}
}
}
--------------------------------------------------------------------------------------------------------------------
// 子页面
// 如果父页面arr传参过来子页面接收
var arrArguments = window.dialogArguments
// 改为
var arrArguments = window.dialogArguments || window.parent;
// 所有操作完成之后关闭之后,如果需要传参给父页面
if(window.parent) window.parent.returnValue=arr.join('_');
if(window.opener) window.opener.returnValue=arr.join('_');
注意:如果子页面给父页面传参的时候一定要字符串,不然可能会出现其他问题。
4. 按下回车键,表单自动提交,禁止表单提交
报错信息:
按下回车键,表单自动提交,禁止表单提交
<form>
<input id="input" />
<input onclick="query();" type="button" value="查询" />
</form>
解决方案:
如果需要禁止表单提交之后调用接口,则加入query(),反之则删除。
<form>
<input id="input" onkeydown="javascript:if(event.keyCode==13){query();return false}" />
<input onclick="query();" type="button" value="查询" />
</form>