2011-07-08 7 views
4
<body> 
    <script> 
    ping = new Object; 
    ping.test = '1234'; 
    </script> 

<a href="#" onclick="alert(ping.test);">Test</a> 
</body> 

IE8では動作しますが、FirefoxまたはChromeでは動作しません。 ポップアップがFF v5とChrome v12で「未定義」を示し、IE9で「1234」と表示されます。onclick = "alert(ping.test);"定義されていません

+0

多くのものを向上させることができますが、動作するはずFF4 – Mrchief

+0

で私のために動作します。 – alex

+0

また、スクリプトの種類を指定する必要があります:type = "text/javascript" –

答えて

0

これは範囲の問題です。これは、インラインイベントモデル(DOMレベル0)ので、その実行コンテキスト内で定義された変数のみが使用されている、これは私の作品

<body> 
    <script> 
    var ping = {}; 
    ping.test = '1234'; 

    function test(){ 
     alert(ping.test); 
    } 
    </script> 
<a href="#" onclick="test();">Test</a> 
</body> 
+0

iliaありがとうございますが、依然としてChrome V.12とFF 5.0 – Benjamin

+0

では「未定義」があり、Zachのコードを使用しています。それは働くことが保証されています。 –

+0

ちょうどvar ping = {}で試行しました。まだFF5は未定義です。あなたはFF5とChrome 12のバグだと思っていますか? – Benjamin

1

pingが範囲外になりました。試してみてください:

<body> 
    <a href="#" id="test">Test</a> 
    <script> 
    var ping = new Object(); 
    ping.test = '1234'; 
    document.getElementById("test").onclick = function() { 
     alert(ping.test); 
    }; 
    </script> 
</body> 
+2

どのようにpingが有効範囲外ですか?その時点ではグローバルな目的です。(それ以外は、あなたの一般的なコーディングスタイルははるかに良いと思います) –

+1

varで変数を宣言しないと、予測できないことがスコープに発生します。 –

+0

おかげでザック、問題は、私のアプリケーションは非常にAJAX集中的です。 (jqueryの「ライブ」機能は実際には私の最善の選択肢ではありません) – Benjamin

4

<body> 
    <script> 
    var ping = {}; 
    ping.test = '1234'; 
    </script> 

<a href="#" onclick="alert(ping.test);">Test</a> 
</body> 

編集:これを試してみてください。インタプリタがページを通過するとき

次のセクション

ping = new Object; 
ping.test = '1234'; 

は独自の実行コンテキストです。グローバルスコープ内のコードは、グローバルオブジェクトをthis経由で使用します。

しかし、ここで

<a href="#" onclick="alert(ping.test);">Test</a> 

個別の実行、無名関数としてお使いのブラウザビューです。使用する

<a href="#" onclick="alert(this);">Test</a> 

私たちが望む結果にはなりません。行はwindowと表示され、thisは実際にインラインイベントハンドラが動作する現在のオブジェクトに使用されています。

したがって、windowを参照することで、この文脈ではpingが表示されない限り、このコンテキスト内でpingは定義されません。ブラウザの実行時に

<a href="#" onclick="alert(window.ping.test);">Test</a> 

は今、それは(\スクリプト\)コンテキストで thisと同じになります windowグローバル変数を取得し、

がで見ping.testするためにアクセスする必要があります次のブラウザ

  • Google ChromeのMacの12.0.742.112
  • Safariのバージョン5.0.5(6533.21.1)
  • Firefo Xマック3.6.18

参照
Mozilla Docs: this keyword
Dom Events: inline model

+0

答えは素晴らしい純粋であること –

関連する問題