返回false对第二次onclick切换事件不起作用

时间:2013-08-18 18:46:02

标签: javascript onclick

我有一个切换功能。当它第一次被触发时,由于返回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>

3 个答案:

答案 0 :(得分:1)

以下是您尝试执行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();
    } 
} 

答案 1 :(得分:1)

尝试使用

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

答案 2 :(得分:0)

我想......

所有你需要的

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

或速记:     event.preventDefault? event.preventDefault():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;
    }
},
[...]

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