2011-12-30 10 views
6

私はいくつかのjqueryで次のjavascript関数を持っています。私はcreateAppointmentConfirm関数を呼び出すときは、のSendMail(ID)関数を呼び出ししようとしますが、エラーがスローされます。Microsoft JScript実行時エラー:関数が予想される

"Microsoft JScript runtime error: Function expected"

をとFirefoxデバッガはエラーがスローされます。ここでは

SendMail is not a function [Break On This Error] 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"); 
     } 
    }); 
} 
+1

それは、このために[jsFiddle](http://jsfiddle.net/)を設定することは可能ですか? – jabclab

+1

JSの中のどこかで閉じ括弧が見つからない場合は、JSを全部確認できますか?js全体を投稿してみてください –

+0

これらの関数はどちらがページ上にありますか?または、それらはインクルードされたjsファイルの一部ですか? – ShankarSangoli

答えて

11

説明

ああ、私はいくつかの研究と例のコードを実行するために取得する主な理由は、質問のこれらの種類を愛します! :)

まず、コードで何が起こっているのかを説明しましょう。

あなたのコードには何も技術的にありませんが、それはあなたが名前の競合またはお電話しようとしている機能のいずれかを持っているだけのことですそれらを呼び出している範囲の外にあります。 2つの別々のjavascriptファイルをリンクしている可能性もあります。そのうちの1つは、実行時に適切にリンクされていない可能性があります。ここで

は、いくつかの問題についての記事です:

Here's a debugging guide、および見出し ​​小見出し下で見て下を取る、より正確にxyz is not defined

xyz is not defined
This error occurs when your JavaScript code references a variable or object that does not exist. For example, you get the error with the following. (Note that the assigned variable is Test, whereas the variable used with the alert method is Text.)

var Test="This is a test; alert (Text); 

Another common mistake is to use the wrong capitalization when referring to variables and objects. This code results in an error, even though you have spelled the variable name correctly:

var Test="This is a test; alert (test); 

または、次のように言及していない: 関数と変数を同じ名前で宣言している可能性があります。


ソリューション

/エラーを誘発するコードを実行しますJSFiddleで次の例

あなたがHTMLパネルで「行く」送信ボタンを押してください。

解決策はかなりあなた次第です。あなたはコード全体を投稿していないので、正確な場所を見つけるのを手伝うことはできません。

私が推測するならば、あなたは変数名をSendMailという名前で宣言していると言いたいと思います。このスクリプトはあなたがそれを参照していることを前提としています。

JSFiddleで命名の競合が発生する例を作成しました。

Naming conflict example。そう、それはSendDebugMessages()になった。ここ

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を追加したとき、私は少し不注意でした。
Whops。

また、オブジェクトや変数で発生することもあります。あなたはどこから来ているのか分かりません。もちろん

、あなたはそれを解決するために必要なすべては、私はあなたの問題、機能と同じ名前を共有する変数を表し思う

Here's an example

バック正しい関数名に変更しています。

var SendDebugMessage = "something"; 

function SendDebugMessage(msg){ 
    $("#debug").prepend("<div>"+msg+"</div>"); 
} 

簡単な修正の種類:いずれかの名前を変更します。

Here's a working example, without any errors..

+1

ああ男の子、私はこれらの種類の答えが大好き!ニースの研究。 – DanM7

+0

この答えは、私がパラメータによって関数に配列を持ってきたことを発見するのに役立ちました。そして、「self」で修飾された同じ名前のKnockoutを観測可能にし、次にKOのutil関数を実行しようとしました。 KO観測可能なバージョンの代わりにパラメータ配列を使用します。 – bubbleking

関連する問題