在IE中,锚点标签的onclick事件不起作用

6
以下代码在Firefox和Chrome中运行良好,但是IE 8在单击锚链接时不会调用submit()方法。
<a href="javascript:void(0);" onclick="submit();">Sign In</a>

submit方法在同一页中定义,如下所示:
<head>
<script type="text/javascript">

function submit()
{
// other code                                              
document.forms[0].submit();
}  

</script>
</head>

你尝试过使用 onclick="javascript:submit();" 吗? - Umair A.
1
@Umair:在onclick或类似的事件处理程序属性上不需要使用javascript:前缀。这不是href - T.J. Crowder
曾经它对我有用,所以我猜它还是可以的。 - Umair A.
@Umair:恕我直言,那一定是其他问题。在那个位置,javascript:是一个标签(而且你没有使用它),而不是协议。在href中,它才是一个协议。 - T.J. Crowder
也许这是个愚蠢的问题:有表单吗?:) 或者是不止一个? - Trick
如果您将submit()函数更改为function submit() { alert('it works'); }会发生什么? - irishbuzz
4个回答

7
请问可不可以提供更多上下文信息?比如submit函数在哪里定义以及定义方式是怎样的?看上面的代码,应该是可以工作的,但是需要注意以下问题:

你可能还需要在其中添加 return false; 以取消默认操作。例如:

<a href="javascript:void(0);" onclick="submit();return false;">Sign In</a>

可能是在submit之后立即发生默认操作并干扰了它。

编辑:只是为了好玩,尝试使用不同的名称来命名您的submit函数。IE存在命名空间问题。例如,如果您有任何带有idname属性设置为“submit”的内容,则可能会出现问题...


我尝试添加"return false;"但没有效果。IE调试器显示对onclick代码的调用,但不会进入submit()方法。 - Mark
@Mark:我不确定你所说的调试器显示进入onclick代码但未进入submit方法是什么意思。是否抛出异常?如果没有,发生了什么使它“不会”进入函数? - T.J. Crowder
感谢T.J.的回复。这真的很奇怪。我将IE 8调试器设置为“全部中断”。一旦我点击“登录”链接,调试器就会中断并在锚点中突出显示onclick="submit();"。我假设高亮显示是为了指示要执行的下一条指令。为了安全起见,我还在submit方法内设置了一个断点。从这个点开始,我在调试器菜单上点击“逐步进入”或“逐步跳过”。两者都有相同的效果,即突出显示void(0)方法。由于某种原因,IE不会执行submit()函数。我没有看到任何错误的迹象。 - Mark
1
你是对的T.J. 这是一个命名空间冲突。IE使用submit来做某些事情。一旦我改变了函数名,它就可以工作了。再次感谢你的帮助。 - Mark
@Mark:太好了!很高兴能帮上忙,我一开始就应该想到这个的。 - T.J. Crowder
@T.J.Crowder 我也遇到了与<a onclick="click()"><\a>函数相同的命名空间问题。一旦我更改了函数名称,一切就正常了。感谢您的讨论。 - Sachin Sharma

3
对于最近遇到这个问题的其他人,我解决了IE 11在该网站上使用“兼容模式”的问题。它看到我在同一域中,假设该网站是一个内部网站,并自动切换到兼容模式,从而破坏了一些Javascript(并导致了一些其他意外的显示问题)。
您可以通过单击设置齿轮并选择“兼容性视图设置”来关闭此“功能”。有一个被称为“在兼容性视图中显示内部网站”的选项框。

1

尝试使用

<a onclick="submit();">Sign In</a>

或者

<a href="javascript:submit();">Sign In</a>

0
如果您需要将值输入到JavaScript函数中,请确保使用单引号而不是双引号。
例如:
<a href="#" onclick="your_function('input');">Sign In</a>

这在ie9中对我不起作用。我不得不转向jquery。 - Abdul Rehman Sayed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接