Объяснение
О, мальчик, мне нравятся такие вопросы, в основном потому, что я провожу некоторые исследования и пример кода! :)
Итак, во-первых, давайте объясним, что происходит с вашим кодом.
В вашем коде нет ничего технически неправильного, просто у вас либо конфликт имен, либо функции, которые вы пытаетесь вызвать, выходят за рамки вызывающей их области.
Возможно также, что вы связываете два отдельных файла javascript, и один из них не связан должным образом во время выполнения, возможно, из-за орфографической ошибки.
Вот несколько статей о проблемах:
Вот руководство по отладке , а если быть более точным, взгляните вниз под заголовком
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);
Или, поскольку они не упоминают: возможно, вы объявили функцию и переменную с одинаковыми именами.
Решение
Следующие примеры в JSFiddle будут вызывать ошибки / запускать код при нажатии кнопки отправки «go» на панели HTML.
Решение в значительной степени зависит от вас. Вы не опубликовали весь код, поэтому я не могу помочь вам определить точное место.
Если бы я предположил, я бы сказал, что вы где-то объявили переменную с именем 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.
Это также может происходить с объектами и переменными. Вы просто не будете знать, откуда он.
Конечно, все, что вам нужно сделать, чтобы решить эту проблему, это вернуть обратно правильное имя функции
Вот пример , который, я думаю, представляет вашу проблему , функцию и переменную с одинаковым именем.
var SendDebugMessage = "something";
function SendDebugMessage(msg){
$("#debug").prepend("<div>"+msg+"</div>");
}
Вид простого исправления: измените имя на одном из них.
Вот рабочий пример, без ошибок ..