Estoy enfrentando un problema extraño y no puedo encontrar ninguna solución.
jQuery (cualquier versión, desde 1.7. * a 1.10. *) falla en Internet Explorer 8. Todos los complementos (desde bootstrap) y la biblioteca jQuery caen con un error:
El objeto no es compatible con esta propiedad o método.
Captura de pantalla del depurador:
Excavando en código de plugins, como este:
$.fn.alert = function (option) {
return this.each(function () {
//...
})
}
muestra el problema: esta la palabra clave apunta a HTMLDomObject, no en un objeto jQuery. ¿Qué puede causar un error tan extraño?
Solamente en Internet Explorer 8!
Respuestas
0 para la respuesta № 1Es posible que algún otro código o complemento esté cargando otra biblioteca de JavaScript y que el código de llamada no esté siendo atendido jQuery.noConflict()
. Esto me ha pasado varias veces. Mientras tanto, para hacer que su código funcione, también puede hacer lo siguiente:
//If "this" is pointing to a HTMLDomObject
var obj = $(this)
0 para la respuesta № 2
He encontrado un trozo de código, que causó estoproblema. Todavía no entiendo, cómo podría romper todo jQuery de esa manera y por qué se rompió (de nuevo, funcionó perfectamente en todos los navegadores excepto en Internet Explorer 8), pero cambiando el para en iterador a $ .each () cometió errores para desaparecer.
for (var i in $postsPortions) {
var $p = $($postsPortions.get(i));
var offset = $p.offset();
if (offset && Math.abs(offset.top - scrollTop) < 100) {
var year = $p.data("year");
var season = $p.data("season");
window.location.hash = year + "/" + season;
$milestones.removeClass("active");
$milestones.filter(".year_" + year + ".season_" + season).addClass("active");
return;
}
if (i >= ($postsPortions.length - 1)) return;
}
-1 para la respuesta № 3
Cuando utiliza el método jQuery.each, "esto" (en la devolución de llamada) apunta al elemento DOM, no al envoltorio jQuery. De la siguiente manera, tienes que envolver "esto" en el objeto jQuery:
$elements.each(function(){
var $this = $(this);
// do something with $this ...
});