/ / jQuery no funciona en Internet Explorer 8 ("this" devuelve DOM en lugar de jq) - javascript, jquery, internet-explorer, internet-explorer-8

jQuery no funciona en Internet Explorer 8 ("this" devuelve DOM en lugar de jq) - javascript, jquery, internet-explorer, internet-explorer-8

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:

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 № 1

Es 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 ...
});