6

ビューページにこれがあります:

<input type="checkbox" id="toggle_SITEID" name="@@toggle_SITEID" onclick="toggle_SITEID(this)" /> New <br />

それから私のjsファイルに私はこれを持っています:

toggle_SITEID = function (chk) {
    // something
}

次に、チェックボックスをクリックすると、「何か」が実行されません。Firebugコンソールでチェックインすると、エラーメッセージは次のようになりました。

トグル_SITEIDは関数ではありません

では、なぜですか?

4

3 に答える 3

8

このエラーにはいくつかの理由が考えられます。

  • HTMLファイルでスクリプトを参照していません。

  • 関数はグローバルスコープではなく、内部スコープで宣言されています。
    グローバルスコープ-WORKINGDEMO内部
    スコープ-NONWORKINGDEMO

  • id関数name()と同じ要素がありtoggle_SITEIDます。
    Internet Explorerでは、要素の使用idはのショートカットですdocument.getElementById()var宣言を使用してリンクを解除します。

  • 発生する可能性のある別の問題は、インラインハンドラーの一意のスコープチェーンに干渉するグローバル変数を使用しようとするインラインハンドラーがある場合です。それはグローバルなときに起こります...

    • ハンドラーを持つ要素の任意のプロパティと同じ名前を持っている、または
    • 上の任意のプロパティと同じ名前を持っていますdocument

    インラインハンドラーのスコープチェーンには、要素自体と、document変数オブジェクトとしてスコープチェーンに挿入された要素があるため、これらのオブジェクトのプロパティは、グローバル変数にアクセスするときに干渉します。

    たとえば、次の要素が与えられた場合、のようなことを行わない限り<a onclick="foo();">click me</a>、グローバルを正常に呼び出すことができます。はスコープチェーンの変数オブジェクトとして挿入されるため、はグローバルをシャドウイングします。foo() document.foo = "bar"documentdocument.foofoo

    同じことが要素自体にも当てはまります。fooグローバル関数を呼び出す前にプロパティを要素に追加すると、そのプロパティはグローバルをシャドウイングします。<a onclick="this.foo = 'bar'; foo();">click me</a>

于 2012-04-18T05:48:29.530 に答える
-2

私に飛び出すことが1つあります。

匿名関数であっても、セミコロンで終わらせないでください。

これを試して:

toggle_SITEID = function (chk) {
    alert("I work!");
};

作業デモ:http://jsfiddle.net/crazytonyi/cDNcu/

于 2012-04-18T05:50:00.567 に答える