繁体   English   中英

Onclick函数在返回true时不会阻止锚标记的HREF值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM