2016-12-16 15 views
-1

JavaScriptでアラートを出して、ページをリロードしないように警告しています。しかし、私は彼らがアラートなしに他のページにナビゲートすることができるようにしたい、ちょうど現在のページをリフレッシュしないでください。私はいくつかのアラートを見つけましたが、どちらの場合もアラートを提供するか、アラートを提供して、とにかくページをリフレッシュします。私は、ユーザーに警告を与えてから、ページをリフレッシュさせないようにしたい。私はそれは彼らがまたそれを残した後にページに戻ることができないべきであることを意味すると思いますか?JavaScript/HTML Page Refresh Alert

+0

私はちょっと調べてみましたが、ページの更新を検出する信頼できる、または決定的なイベントは見つかりませんでした。ページの更新が問題となる状況を避けることを検討することもできます。私はいくつかの方法を考えることができます: * POSTの上に '感謝の投稿'などを表示し、ヘッダやjavascriptを使って別のページにリダイレクトしてください。 * AJAXを使って投稿を行います操作。これを行うと、ブラウザの更新ボタンやF5はAJAXを再実行しませんが、現在のページを更新します。 –

+0

このページでは、ユーザーに乱数を提供しています。新しい乱数を取得し続けることはできません。 – fryingpantheist

+0

クッキーに保存することを検討してください。 「ユーザーがクッキーを持っていない場合は新しい乱数を割り当て、そうでない場合はクッキーから乱数を取得する」のようなものです。 –

答えて

0

次のようにあなたがonbeforeunloadを使用して、変数を設定することができます。

var l=false; 
 
window.onbeforeunload = function() { 
 
    if (!l) { 
 
    return "you shouldn't leave"; 
 
    } 
 
}
<a href="//google.com" onclick="l=true">Leave</a>

を(それはiframe内にありますので、これは、ファイル名を指定して実行スニペットでは動作しません)

+0

これは私が使いこなしたものですが、それは良いことですが、ユーザーが別のページに移動できるようにしたいのです。 – fryingpantheist

-1

これは役に立つかもしれません。上記のコードと合わせて;;;

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<style> 
    #dialogoverlay{ 
    display: none; 
    opacity: .8; 
    position: fixed; 
    top: 0px; 
    left: 0px; 
    background: #FFF; 
    width: 100%; 
    z-index: 10; 
} 
#dialogbox{ 
    display: none; 
    position: fixed; 
    background: #000; 
    border-radius:7px; 
    width:550px; 
    z-index: 10; 
} 
#dialogbox > div{ background:#FFF; margin:8px; } 
#dialogbox > div > #dialogboxhead{ background: #666; font-size:19px; padding:10px; color:#CCC; } 
#dialogbox > div > #dialogboxbody{ background: #333; padding:20px; color:#FFF; } 
#dialogbox > div > #dialogboxfoot{ background: #666; padding:10px; text-align:right; } 
</style> 
<script> 
    function CustomAlert(){ 
    this.render = function(dialog){ 
     var winW = window.innerWidth; 
     var winH = window.innerHeight; 
     var dialogoverlay = document.getElementById('dialogoverlay'); 
     var dialogbox = document.getElementById('dialogbox'); 
     dialogoverlay.style.display = "block"; 
     dialogoverlay.style.height = winH+"px"; 
     dialogbox.style.left = (winW/2) - (550 * .5)+"px"; 
     dialogbox.style.top = "100px"; 
     dialogbox.style.display = "block"; 
     document.getElementById('dialogboxhead').innerHTML = "Acknowledge This Message"; 
     document.getElementById('dialogboxbody').innerHTML = dialog; 
     document.getElementById('dialogboxfoot').innerHTML = '<button onclick="Alert.ok()">OK</button>'; 
    } 
    this.ok = function(){ 
     document.getElementById('dialogbox').style.display = "none"; 
     document.getElementById('dialogoverlay').style.display = "none"; 
    } 
} 
var Alert = new CustomAlert(); 
function deletePost(id){ 
    var db_id = id.replace("post_", ""); 
    // Run Ajax request here to delete post from database 
    document.body.removeChild(document.getElementById(id)); 
} 
function CustomConfirm(){ 
    this.render = function(dialog,op,id){ 
     var winW = window.innerWidth; 
     var winH = window.innerHeight; 
     var dialogoverlay = document.getElementById('dialogoverlay'); 
     var dialogbox = document.getElementById('dialogbox'); 
     dialogoverlay.style.display = "block"; 
     dialogoverlay.style.height = winH+"px"; 
     dialogbox.style.left = (winW/2) - (550 * .5)+"px"; 
     dialogbox.style.top = "100px"; 
     dialogbox.style.display = "block"; 

     document.getElementById('dialogboxhead').innerHTML = "Confirm that action"; 
     document.getElementById('dialogboxbody').innerHTML = dialog; 
     document.getElementById('dialogboxfoot').innerHTML = '<button onclick="Confirm.yes(\''+op+'\',\''+id+'\')">Yes</button> <button onclick="Confirm.no()">No</button>'; 
    } 
    this.no = function(){ 
     document.getElementById('dialogbox').style.display = "none"; 
     document.getElementById('dialogoverlay').style.display = "none"; 
    } 
    this.yes = function(op,id){ 
     if(op == "delete_post"){ 
      deletePost(id); 
     } 
     document.getElementById('dialogbox').style.display = "none"; 
     document.getElementById('dialogoverlay').style.display = "none"; 
    } 
} 
var Confirm = new CustomConfirm(); 
</script> 
</head> 
<body> 
<div id="dialogoverlay"></div> 
<div id="dialogbox"> 
    <div> 
    <div id="dialogboxhead"></div> 
    <div id="dialogboxbody"></div> 
    <div id="dialogboxfoot"></div> 
    </div> 
</div> 
<p id="post_1"> 
    Today is a lovely day ... 
    <button onclick="Confirm.render('Delete Post?','delete_post','post_1')">Delete</button> 
</p> 
<p id="post_2"> 
    I like pickles ... 
    <button onclick="Confirm.render('Delete Post?','delete_post','post_2')">Delete</button> 
</p> 
<button onclick="Alert.render('Hello World')">Custom Alert</button> 
</body> 
</html> 

これにより、カスタムアラートを送信できます。
ここにコードの説明:Alert Box

関連する問題