旧版IE兼容的JavaScript onclick函数在IE11/Edge/Chrome中失效求助
解决旧IE迁移到现代浏览器时日期选择功能失效的问题
看起来你的问题核心是现代浏览器不再兼容旧版IE的一些非标准特性,咱们一步步拆解问题并修复:
1. 直接引用元素name作为全局变量的问题
旧版IE会自动把带name属性的DOM元素注册为全局变量,但IE11、Edge和Chrome都取消了这个非标准行为。你代码里的setDateField(txtToDate)中,txtToDate会被识别为未定义变量,直接导致函数调用失败。
修复方案:
明确通过DOM API获取元素,替换掉直接使用txtToDate的写法:
- 若保留
name属性,用document.getElementsByName('txtToDate')[0](注意getElementsByName返回元素集合,取第一个元素) - 更推荐给input加
id属性,比如<input id="txtToDate" name="txtToDate" ...>,再用document.getElementById('txtToDate')获取,效率更高且准确。
修改后的onClick代码示例:
onClick="setDateField(document.getElementById('txtToDate')); top.newWin = window.open('/html/calendar.html','cal','width=210,height=230,left=200,top=300,titlebar=yes')"
2. javascript:doNothing()的潜在报错
如果你的代码里没定义doNothing()函数,现代浏览器点击这个a标签时会抛出错误,直接中断后续的onClick逻辑(旧IE可能忽略这类错误)。
修复方案:
- 要么补充定义
doNothing函数:function doNothing() { return false; // 阻止a标签的默认跳转行为 } - 更简洁的方式是把href改成
#,同时在onClick末尾加return false,避免页面跳转滚动:<A HREF="#" onClick="setDateField(document.getElementById('txtToDate')); top.newWin = window.open('/html/calendar.html','cal','width=210,height=230,left=200,top=300,titlebar=yes'); return false;">
3. window.open参数的兼容性问题
你用的dependent=yes是旧IE独有的参数,现代浏览器完全不支持,可能导致日历窗口无法正常打开或显示异常。
修复方案:
移除dependent=yes,并把screenX/screenY换成标准的left/top参数(现代浏览器对这两个参数支持更好),修改后的窗口参数为:width=210,height=230,left=200,top=300,titlebar=yes
4. 日历页面填充日期的兼容性(额外检查)
如果你的calendar.html页面是用旧IE的方式(比如直接引用父窗口全局变量)填充日期,那也会在现代浏览器里失效。需要确保日历页面通过标准DOM API操作父窗口元素:
// 日历页面选中日期后执行的代码示例 window.opener.document.getElementById('txtToDate').value = 选中的日期值; // 若用name属性则改为: // window.opener.document.getElementsByName('txtToDate')[0].value = 选中的日期值;
按上面的步骤修改后,应该就能在IE11、Edge和Chrome里正常弹出日历并填充日期了。
内容的提问来源于stack exchange,提问作者Boaz Abraham
相关产品推荐
相关产品推荐

