[英]HTML anchor tag's onclick attribute does not call javascript function
我们有一个DotNetNuke模块在DotNetNuke 5.4.4的实例中运行,安装在“Server A”上,这是一台带有IIS 6.1和Internet Explorer 11的Windows Server 2008 R2 Standard机器。
我们使用Internet Explorer 9从运行Windows Server 2008 Standard的“Server B”访问我们的DotNetNuke模块。
当我们在服务器B上访问我们的模块时,单击具有onclick
属性的anchor html元素时会发生此问题。
onclick的锚点如下:
<a onclick='OpenWindow("/DotNetNuke/DesktopModules/Module/View.aspx?dt=%c2%b2%c2");return false;'
href="http://000.00.0.0/DotNetNuke/DesktopModules/Module/View.aspx?dt=%c2%b2%c2"
target='_blank'
jQuery1431968126278="42">Doc name (SSN-SS-SSNN)</a>
而OpenWindow函数就是这样的
function OpenWindow(url) {
window.open(url, '', 'top=15,scrollbars=yes,menubar=no,height=800,width=800,resizable=yes,toolbar=no,location=no,status=no');
}
正如您所看到的,我们有一个带有onclick属性的anchor元素,它应该调用OpenWindow javascript函数,然后返回false,因此单击一个锚点(浏览到href)的默认操作不会发生。
当我们单击此链接时( 仅在服务器B上 ),我们没有弹出窗口,OpenWindow函数中没有断点,浏览器通过打开一个新选项卡(View.aspx)导航到href。 这告诉我onclick属性引用的OpenWindow函数由于某种原因甚至不运行,即使它在anchor元素上,并且可以在任何其他服务器上运行。
我比较了服务器A DotNetNuke和我的本地开发人员DotNetNuke实例之间的安全设置,web.config文件和DotNetNuke设置,发现设置没有差异。
我将Server B Internet Explorer安全设置与我的安全设置进行了比较,发现设置没有差异。
根据对此问题的评论建议,我尝试将锚标记更改为span标记(删除了href和目标属性),我看到了相同的行为。 它适用于服务器A和开发人员,但现在不在服务器B上执行任何操作。 我认为核心问题是onclick属性未被识别,或者被某种方式阻止。
我现在更进一步,将大部分<a>...</a>
标签更改为<span>...</span>
标签,使用特定的类,然后我附加jQuery(...).live('click', ...)
处理程序(使用jQuery 1.4.2)。 这是允许点击工作,但我仍然没有解决为什么忽略onclick属性。
如果我打开开发人员工具(IE9),然后单击“编辑”按钮再次打开和关闭编辑模式,锚标签和img标签上的所有onclick属性开始正常工作,直到我重新加载页面。
如果我通过开发人员工具以任何方式手动编辑onclick处理程序,比如说删除return false;
从onclick处理程序,它将工作,但如果我把return false;
回来让它变得像我从未改变任何东西,它再次停止工作。
我正在找一块墙来检查这个问题。 我无法在我的开发人员计算机上重现它,它也适用于服务器A,所以代码工作得非常好。 我想我必须有一个设置,我忽略了某个地方,但在哪里? 我不知道此时还有什么要检查,我正在寻找想法。
我没有确切的答案,但我可以给你一般的想法,了解发生了什么以及为什么。
这两个服务器没有得到相同的内容 - 也许它们指向不同的CDN,也许有一个旧文件的JavaScript文件 - 你必须逐个浏览它们。
某个地方的东西正在为所有锚标签应用onclick处理程序。
起初我以为它是贴在身体元素上的东西,并以你的链接为目标,但我已经排除了这一点。 您可以编辑HTML并保存它然后链接工作的事实意味着您正在分离附加到该链接元素的任何内容。
我会:
diff
工具。 您是否尝试直接从onclick属性调用window.open
? 可能是在单击链接时未加载该函数,因此它会产生错误,因此不会调用return false
,并且链接将继续其默认行为(在本例中为打开选项卡)。
如果是这种情况,请查看该函数的加载顺序,或尝试将其放在代码的不同部分(可能在onload
事件中)。
检查您是否在Internet选项中显示JS错误。
它可能有点幼稚,但由于您打开一个窗口作为弹出窗口,可能会有问题,该站点的URL可能会被阻止从浏览器。 如果你只是更换,它应该始终工作
window.open(url, '', 'top=15,scrollbars=yes,menubar=no,height=800,width=800,resizable=yes,toolbar=no,location=no,status=no');
同
window.open(url);
您是否尝试将标记修改为:
<a href='javascript:MyFunction(this);' data-url='YourUrl'>Name</a>
MyFunction: function(obj) {
var element = $(obj);
window.open(element.data("YourUrl"));
}
请注意,如果用户的浏览器配置为以选项卡形式打开Windows,则无法解决方法。 target =“_ blank”是我所知道的实现此目的并通过GP强制执行浏览器行为的最佳方式。
听起来它不属于您提供的代码范围。 你提到打开IE9 dev-tools使它工作,我建议尝试添加console -polyfill,类似于:
if(typeof(console)=="undefined") {
var console = {
log : function() {},
error : function() {},
debug : function() {}
};
}
以防你的一些代码将内容输出到控制台,JS代码在该事件之后停止工作。 可能是一些外部库,在加载后开始向控制台输出内容 - 由于缓存设置和/或网络延迟,可能在不同服务器上的工作方式不同。
注意 :要正确测试,请记住在加载任何JS代码或导入任何外部库之前将其添加到SCRIPT标记中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.