Pregunta

Para el siguiente código, tengo algunos problemas en IE. El segundo parámetro pasado a la función debe ser una referencia al elemento en el que se hizo clic. Esto funciona bien en FF y Safari, pero cuando lo probé en IE7 falla. IE parece obtener el elemento (como se ve en la consola) pero cada vez que intento hacer algo con él aparece el error:

" El objeto no admite esta propiedad o método "

Gracias por la ayuda.

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

Solución

El problema es que btn no tiene automáticamente el método hasClassName, que es una extensión de prototipo.

Para extienda su elemento con funciones de extensión de prototipo , agregue esta línea en la parte superior de doIt():

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

Su código debería funcionar desde allí.

Otros consejos

Esto se debe a que cuando se usa Prototype, los elementos no se extienden automáticamente con las funciones de Prototype en la carga de la página en IE, específicamente tienen que pasar por una llamada $() para extender los elementos con estos métodos. Agregue esto a la parte superior de su función para que funcione en IE.

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

Editar: Para aclarar, en todos los navegadores que no sean IE 7 (iirc) y debajo de HTML Elements se crearán prototipos automáticamente, pero en IE < = 7 deben pasar por el < => función para tener estos prototipos aplicados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top