[英]Onclick function is not blocking the HREF value of anchor tag on returning true
我发现onclick函数必须返回false才能继续处理href值,返回true则可以阻止相同的值。 我在这里也用过同样的东西。 返回false时,是正确的,继续使用URL,但是返回true时,它还会打开URL页面。
因此,从onclick函数返回true / false值之间有什么不同。
我正在使用Firefox 9.0.1和IE 7。 。 以下是我的html文件。
<html>
<head>
<script language="JavaScript" type="text/javascript">
function clickthis()
{
alert("its onclick Function call ");
return true;
}
</script>
</head>
<body >
<a id="foo" onclick="clickthis();" href="http://google.com">google</a>
</body>
</html>
我对此行为感到困惑。
事件处理程序需要返回false
以防止正常的链接操作,仅调用函数是不够的。 如果您希望抑制该操作,则处理程序本身需要返回false
值。 所以属性应该是
onclick="return clickthis();"
您应该在事件对象上使用preventDefault
方法。 示例: http : //jsfiddle.net/lolo/vD5hK/
[已测试Firefox 35.0.1]
我为此提出了一些解决方案。 如果检测到锚,并定义了href,则点击将接管并重定向页面。
码:
<html><title></title><body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script language="JavaScript" type="text/javascript">
function clickthis(e, obj)
{
console.log('click');
e.preventDefault();
$.ajax({url: "a.html",
success: function(result){
console.log('ajax success');
makeRedirect(obj);
},
error: function(result){
console.log('ajax error');
makeRedirect(obj);
}
});
}
function makeRedirect(obj){
if (obj && obj.tagName == 'A' && obj.href){
console.log('redirecting');
window.location = obj.href;
}
}
</script>
<a id="foo" onclick="clickthis(event,this);" href="http://www.google.com">###3 google 3###</a>
</body></html>
注意:所有异步逻辑完成后,您甚至可以进行重定向...
您需要使用onclick="return clickthis();"
并且clickthis()必须返回false。
如果您要进行渐进式增强(例如,如果用户未启用JavaScript,则转到google.com,如果启用了JavaScript,则显示警报),那么您希望标记看起来像这样:
<html>
<head>
<script language="JavaScript" type="text/javascript">
function clickthis(e)
{
e.preventDefault();
alert("its onlcick Function call ");
return false;
}
</script>
</head>
<body >
<a id="foo" onclick="clickthis(event);" href="http://google.com">google</a>
</body>
</html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.