/ /保存されていない変更の警告ポップアップ-javascript、jquery、asp.net

未保存の変更に関する警告ポップアップ - javascript、jquery、asp.net

「未保存の変更」を実装しようとしていますWebアプリケーションで警告が表示されますが、これを適切に機能させるのに苦労しています。javascriptのonbeforeunloadイベントの存在は知っていますが、カスタムdivをモーダルポップアップとしてモーダルポップアップとして使用するよう要求されました。未保存の変更。

私がこれまでに得たのはこれです:

基本的にそれがすることは関数をバインドすることですページが汚れているかどうかを確認し、ポストバックを引き起こす可能性のあるリンクやボタンなどをクリックする前にポップアップでユーザーにプロンプ​​トを表示します。私が今抱えている問題の1つは、最後のイベントではなく、続行を押すとキャンセルされたイベントがすべて実行されているように見えることです。

私はそれが最良の解決策ではないことを知っていますが、それが私の頭に浮かんだ唯一のものです。より良いアイデアは大歓迎です:)

他のすべてのイベントの前にイベントをバインドするjQuery関数:

$.fn.bindFirst = function(name, fn) {
this.bind(name, fn);
var handlers = this.data("events")[name.split(".")[0]];
if (handlers.length) {
var handler = handlers.pop();
handlers.splice(0, 0, handler);
}
};

function hideSaveWarning() {
$("#divSaveWarning").hide();
}

これにより、キャンセルされたアクションを実行するための続行ボタンが設定されます

function showSaveWarning(e) {
$("#divSaveWarning").show();
$("[id$="_btnContinue"]").click(function() {
e.currentTarget.click();
});
}

function onClickContinueWithoutSaving() {
hideSaveWarning();
setDirtyContent(false);
}

function SetSavePrompt() {
setDirtyContent(false);
$(":input, :radio, :button, a").not("[id$="_btnSave"]").bindFirst("click", function(e) {
if (isPageDirty) {
showSaveWarning(e);
return false;
}
});
}

ありがとう。 よろしく。

回答:

回答№1の場合は3

これでうまくいくでしょうか。

http://mal.co.nz/code/jquery-dirty-forms/


回答№2の場合は1

私はこれをテストしていないので、おそらく微調整が必​​要になりますが、次のようなことができるはずです。

JavaScript:

<script language="javascript" type="text/javascript">
var formChanged = false;
window.onbeforeunload = function() {
if(!formChanged){
return;
}
return confirm("You have made changes to this form. Do you want to continue without saving these changes?");
}
function  setDirty() {
formChanged = true;
}
</script>

コードビハインド:

protected void RegisterClientSaveChangeHandler()
{
foreach (Control ctrl in Page.Controls)
{
if (ctrl != null)
{
//make sure it doesn"t prompt for save if it"s a button click
if (ctrl is Button | ctrl is LinkButton | ctrl is ImageButton | ctrl is HyperLink)
((WebControl)ctrl).Attributes.Add("onclick", "javascript:formChanged=false;");

//make sure that all user input fields register for prompting when the value changes
if (ValidateAsInput(ctrl))
((WebControl)ctrl).Attributes.Add("onchange", "setDirty()");
}
}
}

private bool ValidateAsInput(Control ctrl)
{
return ctrl is TextBox | ctrl is CheckBox | ctrl is RadioButton | ctrl is DropDownList | ctrl is RadioButtonList;
}