重複の可能性:
jQueryUI ダイアログの閉じるボタンを削除しますか?
ユーザーが続行する前に条件に同意する必要があるダイアログを作成しようとしていますが、ユーザーがダイアログの右上隅にある [X] をクリックして閉じることを許可したくありません。ユーザーが「同意する」をクリックすることを要求したいと思います。
ダイアログの「X」を無効にする方法はありますか?
明確化:標準の jQuery UI ダイアログ $.dialog() を使用しているだけです。
重複の可能性:
jQueryUI ダイアログの閉じるボタンを削除しますか?
ユーザーが続行する前に条件に同意する必要があるダイアログを作成しようとしていますが、ユーザーがダイアログの右上隅にある [X] をクリックして閉じることを許可したくありません。ユーザーが「同意する」をクリックすることを要求したいと思います。
ダイアログの「X」を無効にする方法はありますか?
明確化:標準の jQuery UI ダイアログ $.dialog() を使用しているだけです。
私はこれを別の投稿で見つけました、それが役立つことを願っています、それは私のために働きました:
$("#div2").dialog({
closeOnEscape: false,
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
});
これはリンクです:
jQuery UI を使用していると仮定しています。
その場合、beforeClose イベント ハンドラーをアタッチし、[同意する] ボタンがクリックされていない場合は false を返します。CSS を使用して X ボタンを{display: none}
var agreed = false; //has to be global
$("something").dialog({
buttons: {
'Apply': function () {
agreed = true;
$(this).dialog("close");
}
},
beforeClose: function () {
return agreed;
}
});
ダイアログが通常のポップアップ ウィンドウの場合、ユーザーがウィンドウを閉じないようにすることはできません。
jqModalなどの jQuery モーダル ダイアログ プラグインを使用できます。
ただし、ユーザーがメイン ウィンドウを閉じないようにすることもできないことに注意してください。
編集: jQuery UI ダイアログを使用している場合は、次の CSS ルールを追加できます。
#someId .ui-dialog-titlebar-close {
display: none;
}
closeOnEscape
また、を に設定する必要がありfalse
ます。
また、なぜユーザーにクリックを強制I Agree
するのですか?
閉じたウィンドウを、同意しなかったかのように扱うことができないのはなぜですか?
Michael Meadows の回答を補足するだけです。複数のフォームがあり、変数をグローバルにしたくない場合は、フォームの DOM 要素に属性を追加するだけです。何かのようなもの :
$('#yourForm').dialog(
open : function(){
$('#yourForm').attr('agreed', false);
},
beforeClose : function(){
return $('#yourForm').attr('agreed') == 'true';
},
buttons:{'OK':function(){
$('#yourForm').attr('agreed', true);
$(this).dialog('close');
},
'Cancel' : function(){
$('#yourForm').attr('agreed', false);
$(this).dialog('close');
}
}
);
attr は文字列として格納されていると思うので、true だけでなく「true」と比較する必要があると思います。しかし、私はそれについて確信が持てません....
ダイアログのタイトルバー用に作成された div には、ダイアログ (ui-dialog-title-{yourDialogName}) を参照する aria-labelledby 属性があることに気付いたので、次の CSS で「x」を非表示にしました。
div.ui-dialog[aria-labelledby="ui-dialog-title-myDialog"] a.ui-dialog-titlebar-close {
display: none;
}
また、それを防ぐために closeOnEscape を false に設定しました。
ユーザーが X をクリックすることを禁止するタスクに関しては、いくつかのアプローチのいずれかをお勧めします。
それらの1つが正しい方向に進むことを願っています...
関連する問題があったことを追加します。ユーザーが X をクリックして特定のダイアログ ウィンドウを閉じた後、リロードを実行します。他のウィンドウではリロードしません。.js の jQuery ダイアログ関数に追加しました。
.click(function(i){ jQuery('span.ui-dialog-title').each(function(index) {
if (jQuery(this).text() == '/**Title String Here**/') {
a.close(i); location.reload(true);
} else {
a.close(i);
}
});
return false})
これは、スパン テキストでタイトルを探し、閉じるときにリロードします。それ以外の場合は、リロードせずに閉じます。
を使用している場合は、代わりに次alert
のことを検討する必要があります。confirm
if (!confirm("Click OK to confirm that you agree to the terms and conditions.")) {
// they didn't click OK
} else {
// they did.
}
または、前述の SLaks のようなプラグインを使用します