我有一个自定义日期选择器弹出窗口,有时在IE中不起作用。它适用于Chrome和Edge。
代码看起来像这样:
<frameset>
<frame>Buttons for next/prev month/year</frame>
<frame>This is the actual calendar that gets redrawn when the above buttons are used
<a href="javascript:parent.opener.setDate(1);">1</a> //there's a different anchor tag for each day of the month
</frame>
<frameset>
所以这里有点奇怪。我们有两个网络,称之为新旧。旧的可能有很多无证的全球政策变化,新的可能接近政府标准。这适用于旧网络上的任何浏览器,但不适用于新网络上的IE(11)。它适用于Edge。此外,如果顶部框架按钮用于选择下一个/上个月,或仅选择“今天”按钮,则所有底部框架锚定链接都能正常工作。没有控制台错误/警告,网络监视器中没有任何内容显示请求返回错误代码,点击只是不注册。我在customFunction()中放置一个断点,当链接不起作用时它不会中断,但是如果链接可以工作,它将会中断。
对我来说唯一看起来很奇怪的事情是整个弹出窗口的代码看起来像:
str = "<frameset><frame name='topFrame' " +
"src='javascript:parent.opener.drawTop'></frame><frame name='bottomFrame' "+
"src='javascript:parent.opener.drawBottom'><frame</frameset>"
document.write(str);
我确实检查过,当使用prev / next / etc按钮时重绘底部框架的代码与第一次加载时调用的函数相同。
然而,看起来很奇怪的是,在第一次加载时,DOM检查器会显示所有内容(顶部框架,底部框架,包括每月每天的所有单独数字等),但调试器(F12工具)不会不显示用document.write(str)加载的代码;线。为了能够看到该代码并设置断点,我必须使用prev / next按钮,然后在Debugger中显示另一个.html文件,该文件具有与DOM匹配的构造HTML。
答案 0 :(得分:4)
试试这个:
1)
<a href="javascript:parent.opener.setDate(1); void(0);">1</a>
2)
<a href="javascript:function(){parent.opener.setDate(1); return false;}">1</a>
3)
<a href="#" onclick="javascript:parent.opener.setDate(1); return false;">1</a>
4)检查你的代码。也许你的框架具有属性&#39; sandbox&#39;。该属性可以阻止javascript。例如:
<iframe src="URL" sandbox>
答案 1 :(得分:3)
除了Nutscracker的伟大建议之外,我还有一些模糊的问题与document.write和事件处理程序没有附加在IE中。 ConnorsFan评论的问题可能是这里的原因,但您也可以尝试:
document.body.innerHTML = '<frameset><frame name="topFrame" ' +
'src="javascript:parent.opener.drawTop"></frame><frame name="bottomFrame" '+
'src="javascript:parent.opener.drawBottom"><frame></frameset>'
您可能还想检查这个代码是否实际被调用,也许正常工作的弹出窗口是通过prev / next按钮从其他地方加载的,这只是一些剩余的东西。
答案 2 :(得分:0)
如果您的onclick函数返回false,则取消默认浏览器行为。就这样:
<a href='http://www.google.com' onclick='return check()'>check</a>
<script type='text/javascript'>
function check()
{
return false;
}
这意味着您可以将JavaScript函数设置为onclick事件,只需将锚标记链接回您所在的页面 - 因为当您单击它时它不会重定向您但需要{{ 1}}属性。