alert()
を使用して、デザインが他に何も提供しないため、検証エラーをユーザーに出力しますが、jQuery UIダイアログをメッセージのアラートダイアログボックスとして使用します。
エラーは(html)divに含まれていないため、これを実行する方法がわかりません。通常、dialog()
をdivに割り当てる$("#divName").dialog()
ですが、alert_dialog("Custom message here")
などのjs関数がもっと必要です。
何か案は?
DOMに添付する必要さえないと思います。これは私にとってはうまくいくようです:
$("<div>Test message</div>").dialog();
これがJSフィドルです:
ここでいくつかの情報を使用して、使用する独自の関数を作成しました。
として使用することができます...
custom_alert();
custom_alert( 'Display Message' );
custom_alert( 'Display Message', 'Set Title' );
jQuery UIアラートの置き換え
function custom_alert( message, title ) {
if ( !title )
title = 'Alert';
if ( !message )
message = 'No Message to Display.';
$('<div></div>').html( message ).dialog({
title: title,
resizable: false,
modal: true,
buttons: {
'Ok': function() {
$( this ).dialog( 'close' );
}
}
});
}
空の隠されたdivをhtmlページに投げてIDを与えるだけです。その後、それをjQuery UIダイアログに使用できます。 jquery呼び出しで通常行うように、テキストを入力できます。
Eidylonの答えに基づいて、TitleMsgが空の場合にタイトルバーを表示しないバージョンを次に示します。
function jqAlert(outputMsg, titleMsg, onCloseCallback) {
if (!outputMsg) return;
var div=$('<div></div>');
div.html(outputMsg).dialog({
title: titleMsg,
resizable: false,
modal: true,
buttons: {
"OK": function () {
$(this).dialog("close");
}
},
close: onCloseCallback
});
if (!titleMsg) div.siblings('.ui-dialog-titlebar').hide();
}
jsfiddle を参照してください
Nuxとmicheg79で述べたように、ダイアログが閉じた後、ノードはDOMに残されます。
これは、以下を追加するだけでクリーンアップすることもできます。
$(this).dialog('destroy').remove();
ダイアログのcloseメソッドに。この行をeidylonの答えに追加する例:
function jqAlert(outputMsg, titleMsg, onCloseCallback) {
if (!titleMsg)
titleMsg = 'Alert';
if (!outputMsg)
outputMsg = 'No Message to Display.';
$("<div></div>").html(outputMsg).dialog({
title: titleMsg,
resizable: false,
modal: true,
buttons: {
"OK": function () {
$(this).dialog("close");
}
},
close: function() { onCloseCallback();
/* Cleanup node(s) from DOM */
$(this).dialog('destroy').remove();
}
});
}
編集:コールバック関数を実行するのに問題があり、実際にコールバックをトリガーするにはonCloseCallbackに括弧()を追加する必要があることがわかりました。これは私が理由を理解するのに役立ちました: JavaScriptでは、括弧で関数を呼び出すと違いが生じますか?
DAlert jQuery UIプラグイン これをチェックしてください。
@EkoJRの回答を取得し、ユーザーがダイアログを閉じたときに発生するコールバック関数で渡す追加のパラメーターを追加しました。
function jqAlert(outputMsg, titleMsg, onCloseCallback) {
if (!titleMsg)
titleMsg = 'Alert';
if (!outputMsg)
outputMsg = 'No Message to Display.';
$("<div></div>").html(outputMsg).dialog({
title: titleMsg,
resizable: false,
modal: true,
buttons: {
"OK": function () {
$(this).dialog("close");
}
},
close: onCloseCallback
});
}
次に、それを呼び出して関数を渡すことができます。これは、ユーザーがダイアログを閉じるときに発生します。
jqAlert('Your payment maintenance has been saved.',
'Processing Complete',
function(){ window.location = 'search.aspx' })
このコード構文を使用します。
$("<div></div>").html("YOUR MESSAGE").dialog();
これは機能しますが、DOMにノードを追加します。クラスを使用してから、またはそのクラスのすべての要素を最初に削除できます。例:
function simple_alert(msg)
{
$('div.simple_alert').remove();
$('<div></div>').html(is_valid.msg).dialog({dialogClass:'simple_alert'});
}
ダイアログを閉じると、onCloseCallback関数が実行されるという問題があります。これは優れた設計です。
function jAlert2(outputMsg, titleMsg, onCloseCallback) {
if (!titleMsg)
titleMsg = 'Alert';
if (!outputMsg)
outputMsg = 'No Message to Display.';
$("<div></div>").html(outputMsg).dialog({
title: titleMsg,
resizable: false,
modal: true,
buttons: {
"OK": onCloseCallback,
"Cancel": function() {
$( this ).dialog( "destroy" );
}
},
});