Return false对第二个onclick切换事件无效

Return false does not work on a second onclick toggle event

本文关键字:事件 无效 onclick false 第二个 Return      更新时间:2023-09-26

我有一个切换函数。当它第一次启动时,由于返回false,链接没有激活——这很好。

但在它被切换后,链接确实会启动!我不需要它。请帮忙吗?

function viewSHowHide() {
if (document.getElementById("viewSHowHide").innerHTML=="Hide Question") {
document.getElementById("viewSHowHide").innerHTML="View Question";
HideQ();
} else {
document.getElementById("viewSHowHide").innerHTML="Hide Question";
viewQ();
}
} 

HTML

<a title="View Question" id="viewSHowHide" onclick="viewSHowHide(); return false" href="">View Question</a>

以下是您尝试做什么的工作示例http://jsfiddle.net/ericjbasti/fnd9C/

我把它切换到了<span>,这样我就不必在默认情况下与链接想要做的事情作斗争,并稍微清理了一下代码。

HTML:

<span title="View Question" id="viewSHowHide" onclick="viewSHowHide();">View Question</span>

JavaScript:

viewSHowHide = function(){
    var showHide=document.getElementById("viewSHowHide");
    if (showHide.innerHTML=="Hide Question") {
        showHide.innerHTML="View Question";
        HideQ();
    } else {
        showHide.innerHTML="Hide Question";
        viewQ();
    } 
} 

尝试在中使用href="javascript:void(0)"

<a title="View Question" id="viewSHowHide" onclick="viewSHowHide(); return false" href="javascript:void(0)">View Question</a>

我认为。。。

您所需要的一切

if (event.preventDefault) { //check if browser supports preventDefault
    event.preventDefault();
} else { //if no support -> IE lte 8
    event.returnValue = false;
}

或简写:event.preventDefault?event.prventDefault():event.returnValue=false;

将其封装在一个函数中以更快地使用,例如:

<a href="#something" onclick="prevent();">click prevent</a>
<script>
prevent = function() { // in this case no need to pass 'event'
    event.preventDefault ? event.preventDefault() : event.returnValue = false;
    console.log('event prevented :)');
}
</script>

为什么所有现代浏览器都支持event.preventDefault,但IE从v9开始支持它对于较旧的IE版本(这就是jQuery使用的),您可以连接到事件的returnValue。

*jQuery参考代码

jQuery.Event.prototype = {
[...]
preventDefault: function() {
    var e = this.originalEvent;
    this.isDefaultPrevented = returnTrue;
    if ( !e ) {
        return;
    }
    // If preventDefault exists, run it on the original event
    if ( e.preventDefault ) {
        e.preventDefault();
    // Support: IE
    // Otherwise set the returnValue property of the original event to false
    } else {
        e.returnValue = false;
    }
},
[...]

我希望我在这里没有犯任何错误;)祝你好运