質問

以下のコードでは、IEでいくつかの問題が発生しています。関数に渡される2番目のパラメーターは、クリックされた項目への参照である必要があります。これはFFおよびSafariで正常に機能しますが、IE7でテストするとエラーになります。 IEは(コンソールに表示されるように)要素を取得しているように見えますが、それで何かを行おうとするとエラーが発生します:

<!> quot;オブジェクトはこのプロパティまたはメソッドをサポートしていません<!> quot;

助けてくれてありがとう。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>  
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>   
<script language="javascript" type="text/javascript">   
    var Test = {            
        doIt: function(str, btn) {  
            console.log(str);
            console.log(btn);               
            if (btn.hasClassName('red')) {
                console.log('has red');         
            } else {
                console.log('doesn\'t');
            }           
        }   
    };  
</script>   
<a href="#" onClick="Test.doIt('hello', this)" class="red">Test</a> 
</body></html>
役に立ちましたか?

解決

問題は、btnがメソッドhasClassNameを自動的に持たないことです-これはプロトタイプ拡張です。

プロトタイプ拡張関数で要素を拡張するには、この行を上部に追加しますdoIt()

btn = $(btn); // Extends element with Prototype functions.

そこからコードが機能するはずです。

他のヒント

これは、Prototypeを使用する場合、IEでのページの読み込み時にPrototype関数で要素が自動的に拡張されないため、これらのメソッドで要素を拡張するには$()呼び出しを通過する必要があるためです。 IEで機能するように、これを関数の先頭に追加します。

doIt : function(str, btn) {
    btn = $(btn);
}

編集: IE 7(iirc)以下のすべてのブラウザーではHTML要素が自動的にプロトタイプ化されますが、IE <!> lt; = 7では< =>これらのプロトタイプを適用する関数。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top