2011-09-15 11 views
0

私は次のようなJSコードを持っています。Javascript関数の呼び出しに関する質問

window.onbeforeunload = function saveFav() { 
//Some JS code 
} 

今、この同じ機能は、だから私はちょうど直接としての機能を呼び出しています

リンクのクリックハンドラから呼び出される必要があります。

$("#someLink").click(function() { 
    saveFav(); 
}); 

しかしsaveFav()は、リンクをクリックから呼び出さ取得されていないいくつかの理由のために...は、いくつかの構文の問題があり、OR関数は、ページのみのアンロードに呼ばれるのですか?

アンロードとリンクのクリックで同じようにコードを複製したくありません。

私を助けてください。ありがとうございました。

+1

関数には名前がありますが、関数式を使用してもその名前のシンボルは生成されません。 –

+1

@Felix関数式に関数名を与える唯一の目的は、再帰のためです。 –

+0

@Jacob:まさにその名前は関数内からのみアクセス可能です。しかし、名前付き関数式は、IEのバグ(同じ関数の2つのインスタンスを作成する)のために、とにかく良い考えではありません。 –

答えて

7

本当に簡単、一度そうのような関数を定義:

function saveFav() { 
    //... 
} 

そして、適切なハンドラに割り当てます。

window.onbeforeunload = saveFav; 
$("#someLink").click(saveFav); 

を作成するので、あなたのコードが動作しない理由の背後にある理由がありますnamed function expression現在のスコープに関数名raを使用してシンボルを作成する関数自体が再帰的に呼び出すことができる唯一の目的のために、名前は関数自体のスコープ内に存在します。

2

あなたは自分の関数を定義したい、その後、両方に割り当てます。

function saveFav() { 
    //Some JS code 
} 

window.onbeforeunload = saveFav; 
$("#somelink").click(saveFav); 

あなたはもちろん、いくつかの他のものをして匿名関数を呼び出すために、これらのイベントのいずれかを割り当て、その後、saveFavを呼び出すことができますsaveFavを呼び出すだけの無名関数を定義する必要はありません。

0

このように呼び出す場合は、saveFav関数をonbeforeunloadに割り当てる前に定義する必要があります。

+2

正しいと言うと、 'saveFav' *は' beforeunload'イベントハンドラです。内部には定義されていません。 –

関連する問題