Frage

Für den Code unten, ich habe einige Probleme im Internet Explorer. Der zweite Parameter an die Funktion übergeben sollte ein Verweis auf das Element angeklickt werden. Dies funktioniert in FF und Safari, aber wenn ich es in IE7 getestet es Fehler. IE erscheint das Element zu erhalten (wie in der Konsole zu sehen ist), aber wenn ich versuche, alles zu tun, damit ich den Fehler:

„Objekt nicht unterstützt diese Eigenschaft oder Methode“

Danke für die Hilfe.

<!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>
War es hilfreich?

Lösung

Das Problem ist, dass BTN nicht automatisch die Methode hasClassName hat - das ist eine Prototyp-Erweiterung.

Um Ihr Element mit Prototyp-Erweiterungsfunktionen erweitern , fügen Sie diese Zeile an der Spitze von doIt():

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

Der Code sollte von dort aus arbeiten.

Andere Tipps

Das ist, weil, wenn Prototyp verwendet, Elemente werden nicht automatisch mit den Prototype-Funktionen auf der Seite Last in IE erweitert, müssen sie speziell einen $() Anruf durchlaufen die Elemente mit diesen Methoden zu erweitern. Fügen Sie diese an die Spitze Ihrer Funktion, um es in IE zu arbeiten.

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

Edit: in allen Browsern Um zu klären, anders als IE 7 (IIRC) und unter HTML-Elemente werden automatisch prototypisiert werden, aber in IE <= 7 müssen sie die $() Funktion passieren diese haben Prototypen angewendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top