Domanda

Per il codice seguente, sto riscontrando alcuni problemi in IE. Il secondo parametro passato alla funzione dovrebbe essere un riferimento all'elemento selezionato. Funziona bene in FF e Safari, ma quando l'ho provato in IE7 ha errori. Sembra che IE ottenga l'elemento (come si vede nella console) ma ogni volta che provo a fare qualcosa con esso ottengo l'errore:

" L'oggetto non supporta questa proprietà o metodo "

Grazie per l'aiuto.

<!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>
È stato utile?

Soluzione

Il problema è che btn non ha automaticamente il metodo hasClassName - che è un'estensione prototipo.

Per estendi il tuo elemento con le funzioni di estensione prototipo , aggiungi questa riga in alto di doIt():

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

Il tuo codice dovrebbe funzionare da lì.

Altri suggerimenti

Questo perché quando si utilizza Prototype, gli elementi non vengono estesi automaticamente con le funzioni Prototype sul caricamento della pagina in IE, devono passare attraverso una chiamata $() per estendere gli elementi con questi metodi. Aggiungi questo nella parte superiore della tua funzione per farlo funzionare in IE.

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

Modifica: Per chiarire, in tutti i browser diversi da IE 7 (iirc) e al di sotto di HTML Elements verranno prototipati automaticamente, ma in IE < = 7 devono passare attraverso < => funzione per applicare questi prototipi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top