ここstackoverflowには同様の質問がたくさんありますが、うまくいく答えが見つかりません。複数のページで繰り返し使用している Javascript 関数がいくつかあるので、それらを外部ファイルに移動することをお勧めします。しかし、私がそうすると、それらは機能しません。
私が現在(今のところ別々の)外部ファイルに持っている2つの関数は次のとおりです。
function MessageDialog(obj, title, dialogText) {
//add the dialog div to the page
$('body').append(String.Format("<div id='messageDialog' title='{0}'><p>{1}</p></div>", title, dialogText));
//create the dialog
$('#messageDialog').dialog({
modal: true,
resizable: false,
draggable: false,
close: function(event, ui) { $('body').find('#messageDialog').remove(); },
buttons:
{
'OK': function() {
$(this).dialog('close');
}
}
});
}
//Confirmation dialog
function ConfirmationDialog(obj, title, dialogText, okButtonText, cancelButtonText) {
var confirmed = false;
if (!confirmed) {
//add the dialog div to the page
$('body').append(String.Format("<div id='confirmationDialog' title='{0}'><p>{1}</p></div>", title, dialogText));
//create the dialog
$('#confirmationDialog').dialog({
modal: true,
resizable: false,
draggable: false,
close: function(event, ui) { $('body').find('#confirmationDialog').remove(); },
buttons:
{
$okButtonText: function() {
$(this).dialog('close');
confirmed = true;
if (obj) obj.click();
},
$cancelButtonText: function() {
$(this).dialog('close');
}
}
});
}
return confirmed;
}
ConfirmationDialog()
イベントから呼び出していOnClientClick
ます (ASP.NET):
MessageDialog()
btnDelIncident_Click
イベントでエラーが発生した場合、コード ビハインドから呼び出されます。
private void DisplayMessageDialog(string msgTitle, string msgText)
{
StringBuilder msg = new StringBuilder();
msg.AppendLine("<script type='text/javascript'>");
msg.AppendFormat(" MessageDialog(this, '{0}', '{1}');" + System.Environment.NewLine, msgTitle, msgText);
msg.AppendLine("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "messageDialog", msg.ToString());
}
ConfirmationDialog()
(ダイアログは表示されませんが) 呼び出しからエラーは発生しませんが、 MessageDialog()
(コード ビハインドからの) 呼び出しにより、Javascript コンソールで「Uncaught ReferenceError: MessageDialog is not defined」が発生します。
<head>
タグに2 つの外部 Javascript ファイルを含めています。これらは、jQuery のインクルードの後にあります。
<script type="text/javascript" src="/Scripts/ConfirmationDialog.js"></script>
<script type="text/javascript" src="/Scripts/MessageDialog.js"></script>
<script>
また、これら 2 つのタグをページの最後に配置しようとしましたが、違いはありませんでした。私は何を間違っていますか?
編集(function($) { });
:ニールが提案したように、関数をラップすることでダイアログボックスの問題を解決できました。最終的に機能する関数は次のとおりです (外部の .js ファイルで宣言されています)。
//Confirmation dialog
(function($) {
var confirmed = false;
ConfirmationDialog = function(obj, title, dialogText, okButtonText, cancelButtonText) {
if (!confirmed) {
//add the dialog div to the page
$('body').append(String.Format("<div id='confirmationDialog' title='{0}'><p>{1}</p></div>", title, dialogText));
//create the dialog
$('#confirmationDialog').dialog({
modal: true,
resizable: false,
draggable: false,
close: function(event, ui) { $('body').find('#confirmationDialog').remove(); },
buttons:
[{
text: okButtonText,
click: function() {
$(this).dialog('close');
confirmed = true;
if (obj) obj.click();
}
},
{
text: cancelButtonText,
click: function() {
$(this).dialog('close');
}
]}
});
}
return confirmed;
};
})(jQuery);