内联Javascript移动到外部文件时出错-如何修复此问题?
关于stackoverflow,这里有几十个类似的问题,但我找不到一个有效的答案。我有几个Javascript函数,在多个页面中重复使用,所以我认为将它们移动到外部文件是个好主意。但当我这样做的时候,它们就不起作用了 以下是我目前在外部文件(单独,暂时)中拥有的两个函数:内联Javascript移动到外部文件时出错-如何修复此问题?,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,关于stackoverflow,这里有几十个类似的问题,但我找不到一个有效的答案。我有几个Javascript函数,在多个页面中重复使用,所以我认为将它们移动到外部文件是个好主意。但当我这样做的时候,它们就不起作用了 以下是我目前在外部文件(单独,暂时)中拥有的两个函数: function MessageDialog(obj, title, dialogText) { //add the dialog div to the page $('body').append(String.For
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()
调用中得到错误(尽管对话框没有出现),但是MessageDialog()
调用(来自代码隐藏)会在Javascript控制台中导致“未捕获引用错误:未定义MessageDialog”
我在
标记中包含了两个外部Javascript文件,它们位于jQuery之后,包括:
<script type="text/javascript" src="/Scripts/ConfirmationDialog.js"></script>
<script type="text/javascript" src="/Scripts/MessageDialog.js"></script>
您肯定不想在外部JavaScript文件中放置脚本标记。脚本标记是HTML元素,而.js文件不是HTML。尝试将代码包装到立即调用的函数表达式中:
(function() {
// your code here
})();
如果要将函数调用绑定到DOM节点上的事件,例如“单击”或“悬停”,则应确保在执行这些绑定之前DOM已准备就绪。jQuery有一个名为.ready()的方法,可用于:
$(document).ready(function() {
});
您肯定不想在外部JavaScript文件中放置脚本标记。脚本标记是HTML元素,而.js文件不是HTML。尝试将代码包装到立即调用的函数表达式中:
(function() {
// your code here
})();
如果要将函数调用绑定到DOM节点上的事件,例如“单击”或“悬停”,则应确保在执行这些绑定之前DOM已准备就绪。jQuery有一个名为.ready()的方法,可用于:
$(document).ready(function() {
});
这应该会有所帮助。在引用MessageDialog客户端方法中的元素之前,需要等待DOM被加载
private void DisplayMessageDialog(string msgTitle, string msgText)
{
StringBuilder msg = new StringBuilder();
msg.AppendLine("<script type='text/javascript'>");
msg.AppendFormat("jQuery(function($) { MessageDialog(this, '{0}', '{1}'); });" + System.Environment.NewLine, msgTitle, msgText);
msg.AppendLine("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "messageDialog", msg.ToString());
}
private void DisplayMessageDialog(字符串msgTitle,字符串msgText)
{
StringBuilder msg=新的StringBuilder();
msg.AppendLine(“”);
AppendFormat(“jQuery(函数($){MessageDialog(this,{0}',{1}');}”);”+System.Environment.NewLine,msgTitle,msgText);
msg.AppendLine(“”);
RegisterStartupScript(this.GetType(),“messageDialog”,msg.ToString());
}
这应该会有所帮助。在引用MessageDialog客户端方法中的元素之前,需要等待DOM被加载
private void DisplayMessageDialog(string msgTitle, string msgText)
{
StringBuilder msg = new StringBuilder();
msg.AppendLine("<script type='text/javascript'>");
msg.AppendFormat("jQuery(function($) { MessageDialog(this, '{0}', '{1}'); });" + System.Environment.NewLine, msgTitle, msgText);
msg.AppendLine("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "messageDialog", msg.ToString());
}
private void DisplayMessageDialog(字符串msgTitle,字符串msgText)
{
StringBuilder msg=新的StringBuilder();
msg.AppendLine(“”);
AppendFormat(“jQuery(函数($){MessageDialog(this,{0}',{1}');}”);”+System.Environment.NewLine,msgTitle,msgText);
msg.AppendLine(“”);
RegisterStartupScript(this.GetType(),“messageDialog”,msg.ToString());
}
他肯定是指在页面底部包含2个外部脚本,而不是将脚本元素添加到js中files@Daniel沃德:啊,是的,我想你是对的:-)也许我读得太快了。干杯--n@NeilGirardi我尝试了你的建议,现在出现了确认对话框,但按“确定”按钮没有任何作用-对话框只是停留在那里,而不是继续执行ASP.NET按钮的OnClient单击操作。另一个问题是,对话框上的按钮实际上有“$okButtonText”和“$cancelButtonText”,而不是我在函数中传递的文本。好的,我对它进行了更多的操作,使它大部分工作正常。我将更新我的原始问题,以显示我更改了什么。剩下的唯一问题是确认对话框中我的按钮上的文本是错误的-按钮文本字面上是“okButtonText”和“cancelButtonText”。有什么方法可以让它显示我传递给函数的值而不是变量名吗?我终于弄明白了——对话框上的按钮没有正确声明(我很惊讶它们居然工作了!)。它们必须声明为数组:按钮:[{text:okbuttonext,click:function(){whatever;}}]
。我将用更正的代码更新我的原始问题。我要感谢尼尔·吉拉迪对我最初的问题的回答,这就是我找到解决办法的原因。谢谢大家!很确定他指的是在页面底部包含2个外部脚本,而不是将脚本元素添加到js中files@Daniel沃德:啊,是的,我想你是对的:-)也许我读得太快了。干杯--n@NeilGirardi我尝试了你的建议,现在出现了确认对话框,但按“确定”按钮没有任何作用-对话框只是停留在那里,而不是继续执行ASP.NET按钮的OnClient单击操作。另一个问题是,对话框上的按钮实际上有“$okButtonText”和“$cancelButtonText”,而不是我在函数中传递的文本。好的,我对它进行了更多的操作,使它大部分工作正常。我将更新我的原始问题,以显示我更改了什么。剩下的唯一问题是确认对话框中我的按钮上的文本是错误的-按钮文本字面上是“okButtonText”和“cancelButtonText”。有什么方法可以让它显示我传递给函数的值而不是变量名吗?我终于弄明白了——对话框上的按钮没有正确声明(我很惊讶它们居然工作了!)。它们必须声明为数组:按钮:[{text:okbuttonext,click:function(){whatever;}}]
。我将用更正的代码更新我的原始问题。我要感谢尼尔·吉拉迪对我最初的问题的回答,这就是我找到解决办法的原因。谢谢大家!