Pergunta

Para o código abaixo, eu estou tendo alguns problemas no IE. O segundo parâmetro passado para a função deve ser uma referência para o item clicado. Esta multa funciona no FF e Safari, mas quando eu testei no IE7 erros. IE parece para obter o elemento (como visto no console), mas sempre que eu tento fazer nada com ele eu recebo o erro:

"O objecto não suporta esta propriedade ou método"

Obrigado pela ajuda.

<!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>
Foi útil?

Solução

O problema é que btn não tem automaticamente o método hasClassName - que é uma extensão Prototype.

estender sua elemento com funções de extensão protótipo , adicione esta linha no topo de doIt():

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

O código deve trabalhar a partir daí.

Outras dicas

Isto porque, quando usando Prototype, elementos não são automaticamente prorrogado com as funções protótipo no carregamento da página no IE, eles especificamente tem que passar através de uma chamada $() para estender os elementos com esses métodos. Adicione isto a parte superior de sua função para fazê-lo funcionar no IE.

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

Editar: Para esclarecer, em todos os outros do que o IE 7 (IIRC) e abaixo Elementos HTML navegadores será protótipo automaticamente, mas no IE <= 7 eles devem passar através da função $() ter estes protótipos aplicada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top