我有以下javascript函数,其中包含一些jquery。当我调用 createAppointmentConfirm 函数时,它会尝试调用 SendMail(id)函数,但会抛出错误:
“Microsoft JScript运行时错误:预期功能”
Firefox调试器抛出错误:
SendMail不是函数[在这个错误上打破] 的SendMail(data.Message);
这是代码。谢谢你的帮助。
function createAppointmentConfirm(data) {
if (data.Error) {
alert(data.Message);
} else {
if ($('#sendMail').attr('checked') == 'checked') {
SendMail(data.Message);
}
RefreshAppointmentList();
}
}
function SendMail(id) {
$.ajax({
url: $('#sendMail').attr('title'),
data: { id: id },
type: "POST",
beforeSend: function () {
$('#sendingMail').dialog({ modal: true });
},
success: function (data) {
if (data.Error) {
alert(data.Message);
}
$('#sendingMail').dialog("close");
},
error: function () {
alert("Error sending mail");
$('#sendingMail').dialog("close");
}
});
}
答案 0 :(得分:11)
哦,小伙子,我喜欢这些问题,主要是因为我做了一些研究和示例代码! :)
所以,首先,让我们解释你的代码发生了什么。
您的代码没有技术上错误,只是您遇到了命名冲突,或者您尝试调用的函数超出了调用它们的范围。 它也可能是你链接两个单独的javascript文件,其中一个没有在运行时正确链接,可能是因为拼写错误。
以下是一些关于这些问题的文章:
Here's a debugging guide,更准确地说,请查看标题下方的底部
Runtime error messages
小标题xyz is not defined
未定义xyz
当您的JavaScript代码引用不存在的变量或对象时,会发生此错误。 例如,您将收到以下错误。 (请注意,分配的变量是Test,而与alert方法一起使用的变量是Text。)var Test="This is a test; alert (Text);
另一个常见错误是使用错误的大写时 指变量和对象。此代码导致错误, 即使您正确拼写了变量名称:
var Test="This is a test; alert (test);
或者,因为他们没有提到:你可能已经声明了一个函数和一个变量,两者都有相同的名称。
当您按下HTML面板中的“go”提交按钮时,JSFiddle中的以下示例将触发错误/运行代码。
解决方案非常适合您。你没有发布完整的代码,所以我无法帮你找到确切的位置。
如果我猜错了,我会说你已经在名称为SendMail
的地方声明了一个变量,并且该脚本假定你指的是那个。
我创建了一个在JSFiddle中发生命名冲突的示例。
function SendMail(iId) {
//Send the mail information to a server page that will pass it along
//For this example, we'll pretend it returned an object
var oReturned = {
"Error": null,
"Message": "Mail has been sent."
};
SendDebugMessages(oReturned.Message);
}
function SendDebugMessage(msg){
$("#debug").prepend("<div>"+msg+"</div>");
}
在这里,我试图调用SendDebugMessage()
函数,
但是当我打电话给我时,我有点粗心,并添加s
,因此它变为SendDebugMessages()
。
Whops。
对象和变量也可能发生。你只是不知道它来自哪里。
当然,您需要做的就是解决它,将其更改回正确的函数名称
Here's an example我认为代表您的问题,一个函数和一个共享相同名称的变量。
var SendDebugMessage = "something";
function SendDebugMessage(msg){
$("#debug").prepend("<div>"+msg+"</div>");
}
一种直接的解决方法:更改其中一个的名称。