2010-05-13 8 views
7

Tengo un sitio web que utiliza el marco de trabajo pro -otipo y estoy buscando utilizar un plugin jquery. Todo funciona solo en IE8. Funciona en ie7 lo que me sorprende. ¿Alguna idea de lo que tal vez esté mal?jquery noConflict no funciona en IE8 solo

IE8 me da objeto no admite esta propiedad o método donde la línea jQuery.noConflict(); es

<script src="/my/docs/jquery.js" type="text/javascript"></script> 
<script src="/my/docs/jquery.simplyscroll.js" type="text/javascript"> </script> 
<script type="text/javascript"> 
jQuery.noConflict(); 
function OpenUp(sURL){ 
    window.open(sURL,null,'height=560,width=820,status=yes,toolbar=yes,menubar=yes,location=yes,resizable=yes,scrollbars=yes',false); 
} 
jQuery(document).ready(function($) { 
$("head").append("<link>"); 
css = $("head").children(":last"); 

css.attr({ 
    rel: "stylesheet", 
    type: "text/css", 
    href: "/my/docs/jquery.simplyscroll.css" 
    }); 

    $("#scroller").simplyScroll({ 
     autoMode: 'loop', 
     framerate: 1, 
     speed: 1 
    }); 
}); 
</script> 

también cansado lo siguiente: var $j = jQuery.noConflict(); var j = jQuery.noConflict();

everythig simplemente funciona no solo en IE8.

+1

¿Puede mostrar el código completo incluyendo dónde incluye jquery y el complemento noconflict? –

+0

Edito el código. Tengo el script src con en el cuerpo. – slik

+0

Esto parece suceder si se invoca noConflict() con un retraso. Consulte también http://forum.jquery.com/topic/jquery-and-prototype-conflicts-in-ie8-when-loading-jquery-after-settimeout-noconflict-doesn-t-help (espera moderación a partir del momento de este comentario) – ripper234

Respuesta

1

he tenido un problema simular en el pasado y trabajaron alrededor de ella mediante el uso de la IE7 emular etiqueta meta

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 

No estoy seguro si este es el mejor trabajo alrededor sin embargo.

+1

No tome esto personalmente, pero esa es una idea terrible. La función "noConflict" funciona bien en IE8. – Pointy

0

He tenido problemas extraños en el pasado con IE8 en máquinas con múltiples versiones de IE instaladas. En mi caso, apareció un error cuando intenté abrir un enlace en una nueva ventana a través de javascript. El mismo código funcionó bien en IE6 y 7, y una máquina con solo IE8 instalado funcionó bien también.

0

Este es un problema que también descubrí. La forma en que lo arreglé fue para actualizar mi jQuery a 1.4. La versión 1.3.2 falla con un prototipo más nuevo en IE8. Lo siento, esta respuesta es tarde.

6

Me he encontrado con esto también usando jQuery-1.4.4.js. Todo funciona bien excepto en IE8. IE8 no reconoce jQuery() nada. Pude resolver el problema cargando jQuery y ejecutando $ .noconflict() antes de cargar Prototype y todo funciona bien en todos mis navegadores de prueba, incluido IE8. Esta secuencia es contraria a la documentación de jQuery y, por lo tanto, estoy nervioso al respecto. No se puede encontrar nada en el sitio de jQuery al respecto.

t22harris

+0

Puedo confirmar que obtuve errores de objetos nulos con jQuery 1.4.4 en IE8 cuando se cargó Prototype primero. Ahora estoy cargando jQuery primero e inmediatamente estoy ejecutando 'noConflict()' ¡y ahora mi aplicación está funcionando nuevamente! –

+0

Gracias, moviendo jQuery y la llamada '$ .noConflict()' antes de que las otras librerías lo resolvieran también para mí. El mismo problema y solución se aplican a jQuery-1.5. Me parece que está relacionado con el documento. Detección de IE. – meyertee

0

que tienen el mismo error exacto con 1.4.4 y 1.4.3 jQuery carga después de prototipo y sólo en IE8, ni siquiera en IE7 o Ie6 jQuery 1.4 resuelto esto para mí.

2

La única forma en que fue capaz de solucionar este problema, para IE8 (que era el único que tiene el problema) y otros navegadores era poner jQuery y la llamada noConflict() en la cabeza inmediatamente después de inicializar la otra biblioteca . De este modo:

<script type="text/javascript" src="/path/to/prototype.js"></script>

<script type="text/javascript" src="/path/to/jquery.js"></script>

<script type="text/javascript">var $j = jQuery.noConflict(); </script>

... seguido por otros scripts que utilizan ya sea jQuery o Prototype.

2

He estado teniendo un problema similar. La solución que estoy usando actualmente es guardar la variable $ en una variable temporal, cargar jquery (estoy cargando jquery desde el código js), ejecutar código dependiente de jquery (con jQuery.noConflict), volver a establecer la variable $.

Está sucio, pero parece que me ha funcionado.

Mi función que añade jQuery (si es necesario) es:

function getJQueryAndGo(callback) { 
    var thisPageUsingOtherJSLibrary = false; 
    var tempDollar = $; 
    // Only do anything if jQuery isn't defined 
    if (typeof jQuery == 'undefined') { 
     if (typeof $ == 'function') { 
      thisPageUsingOtherJSLibrary = true; 
     } 
     loadToHead('script','http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js', function() { 
      if (typeof jQuery=='undefined') { 
        //alert('Super failsafe - still somehow failed...') 
      } else { 
       jQuery.noConflict(); 
       (function($) { 
        callback($); 
       })(jQuery); 

      } 
     }); 
    } 
    else 
    { // jQuery was already loaded 
     jQuery.noConflict(); // This may not be necessary 
     (function($) { 
      callback($); 
     })(jQuery); 
    } 

    $ = tempDollar; 
} 

El loadToHead simplemente carga el script en la etiqueta de la cabeza en alguna parte y se ejecuta la función de devolución de llamada cuando se carga el guión.

La mayor parte de este código lo he encontrado en línea y lo he tweeked. Lamentablemente, no recuerdo dónde dar el crédito a partir de ahora.

1

Acabo de tener el mismo problema. IE 8 no le gusta:

var jQuery = jQuery.noConflict(); 

lo cambió a:

var jq = jQuery.noConflict(); 

funcionó bien.

Cuestiones relacionadas