2

次のコードがあります。私の質問は、メソッド呼び出し内から onbeforeunload カスタム ポップアップをキャンセルする方法はありますか? Firefox の場合、独自のカスタム メッセージを表示したいのですが、ユーザーがキャンセルを押した場合、デフォルト メッセージを表示したくありません。

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var clicked = false;

function copyText()
{
    var span = document.getElementById('sp');
    if(clicked == false)
    {   
        clicked = true;
        span.appendChild( document.createTextNode("clicked") );
    }
    else
    {
        clicked = false;
        span.removeChild( span.firstChild );
    }
}



window.onbeforeunload = function () { 

if(clicked == true)
return ; 

else 
{
if(navigator.userAgent.indexOf("Firefox")!=-1)
{ 
if(confirm("Are you sure you want to close the window without submitting the documents?")){
          self.close();
          return; // I want to not call the custom pop up here 
    }
}
    return "Are you sure you want to close the window without submitting the documents?";

}
};
//}



</script>
</head>
<!--<body onunload="confirmMe()>-->
<body>

<button onclick="copyText()">Click!</button>
<br>
<span style="color:lightblue" id="sp"></span>



</body>
</html>
4

2 に答える 2

1

関数内から onbeforunload イベントをキャンセルする方法はありません。ただし、ユーザーがページを閉じたくない場合は、次のようにデフォルトの popUp が表示されます。これは、ユーザーがページにとどまりたい場合に Firefox でのみ発生します。

window.onbeforeunload = function () { 

if(clicked == false) 
{
    if(navigator.userAgent.indexOf("Firefox")!=-1)
    { 
        if(confirm("Are you sure you want to close the window without submitting the documents ?")){
                self.close();   
                return;   
        }

    }
   return "Are you sure you want to close the window without submitting the documents?";
}

};
于 2012-06-05T18:04:01.063 に答える
0

これは私が使用しているコードです:

window.onbeforeunload = function (e) { 
    if (clicked != true) {
        e = e || window.event;
        if (e) {
            e.returnValue = 'Are you sure you want to close the window without submitting the documents?';
        }
        return 'Are you sure you want to close the window without submitting the documents?';
    }
}
于 2012-06-04T19:54:58.550 に答える