onbeforeunload event is too enthusiastic in IE9

后端 未结 5 1565
萌比男神i
萌比男神i 2021-02-07 00:57

Here\'s some sample test html:



  
    Go nowhere 1<         


        
相关标签:
5条回答
  • 2021-02-07 01:06

    That's a pretty unfortunate bug. It seems you'll have to work around it, and using the hash link method is probably the best way. To avoid taking the user to the top of the page, cancel the event using event.preventDefault() and event.returnValue = false.

    function myClickHandler(e) {
        if (e.preventDefault)
            e.preventDefault();
        e.returnValue = false;
        alert("Not going anywhere!");
    }
    

    Call it like this:

    <a href="#" onclick="myClickHandler(event)">Go nowhere 1</a>
    

    Edit: You could cancel the event for all the hash-links on your page like this:

    var links = document.links;
    for (var i = 0; i < links.length; i++) {
        var link = links[i];
        if (link.href == "#") {
            if (link.addEventListener) {
                link.addEventListener("click", cancelEvent, false);
            }
            else if (link.attachEvent) {
                link.attachEvent("onclick", cancelEvent);
            }
        }
    }
    function cancelEvent(e) {
        e = e || window.event;
        if (e.preventDefault)
            e.preventDefault();
        e.returnValue = false;
    }
    

    Or with jQuery using just one line of code:

    $("a[href='#']").click(function (e) { e.preventDefault(); });
    
    0 讨论(0)
  • 2021-02-07 01:06

    #null in href to prevent page jumping rather than just # and script in onclick=""

    0 讨论(0)
  • 2021-02-07 01:12

    A simpler solution is to use onunload in IE and onbeforeunload in other browsers.

    0 讨论(0)
  • 2021-02-07 01:12

    It's actually not a bug that the "Are you sure you want to leave this page?" message pops up when you click the first links; it seems to be a "feature" in IE 9 - More reasons I dislike IE

    0 讨论(0)
  • 2021-02-07 01:18

    You should not bind an event for click using href="javascript:...: Below is not good.

    <a href="javascript:alert('Not going anywhere!');">Go nowhere 1</a>
    

    If your going to use an onclick and void the href then just return false in the onclick.

    <a onclick="alert('Not going anywhere!');return false;">Go nowhere 2</a>
    
    0 讨论(0)
提交回复
热议问题