2010-05-13 13 views
7

Ho un sito Web che utilizza il framework prootype e sto cercando di utilizzare un plug-in jquery. Tutto funziona solo non in IE8. Funziona in ie7 che mi stupisce. Qualche idea su cosa potrebbe essere sbagliato?jquery noConflict non funziona solo in IE8

IE8 mi dà oggetto non supporta questa proprietà o metodo in cui riga jQuery.noConflict(); è

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

ho anche stanco quanto segue: var $j = jQuery.noConflict(); var j = jQuery.noConflict();

everythig non funziona in IE8 solo.

+1

Puoi mostrare il codice completo incluso dove includi jquery e il plugin noconflict? –

+0

Modifica il codice. Ho scritto la sceneggiatura con il corpo. – slik

+0

Questo sembra accadere se noConflict() viene chiamato con un ritardo. Vedi anche http://forum.jquery.com/topic/jquery-and-prototype-conflicts-in-ie8-when-loading-jquery-after-settimeout-noconflict-doesn-t-help (attesa moderazione al momento di questo commento) – ripper234

risposta

1

Ive ha avuto un problema simular in passato e lavorato intorno ad esso utilizzando l'IE7 emulare meta tag

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

Im non sicuro se questo è il miglior lavoro intorno però.

+1

Non prenderlo personalmente ma è una pessima idea. La funzione "noConflict" funziona perfettamente in IE8. – Pointy

0

Ho avuto strani problemi in passato con IE8 su macchine con più versioni di IE installate. Nel mio caso si è verificato un errore quando ho provato ad aprire un collegamento in una nuova finestra tramite javascript. Lo stesso codice funzionava bene su IE6 e 7 e una macchina con IE8 installato funzionava bene anche con lo .

0

Questo è un problema che ho scoperto anche. Il modo in cui l'ho risolto era aggiornare il mio jQuery a 1.4. La versione 1.3.2 fallisce con il nuovo prototipo su IE8. Spiacente, questa risposta è in ritardo.

6

Mi sono imbattuto in questo anche utilizzando jQuery-1.4.4.js. Tutto funziona bene tranne in IE8. IE8 non riconosce jQuery() nulla. Sono stato in grado di risolvere il problema caricando jQuery ed eseguendo $ .noconflict() prima di caricare Prototype e tutto funziona bene su tutti i miei browser di test incluso IE8. Questa sequenza è contraria alla documentazione di jQuery e quindi sono nervoso al riguardo. Non riesci a trovare nulla sul sito jQuery a riguardo.

t22harris

+0

Posso confermare che stavo ricevendo errori oggetto nulli con jQuery 1.4.4 in IE8 quando Prototype è stato caricato per primo. Ora sto caricando jQuery e immediatamente facendo 'noConflict()' e ora la mia app sta funzionando di nuovo! –

+0

Grazie, spostando jQuery e la chiamata '$ .noConflict()' prima che le altre librerie lo risolvano anche per me. Lo stesso problema e soluzione si applicano a jQuery-1.5. Mi sembra che sia correlato al documento. Rilevamento già per IE .. – meyertee

0

Ho lo stesso errore esatto con 1.4.4 e 1.4.3 di carico jQuery dopo prototipo e solo in IE8, nemmeno in IE7 o IE6 Jquery 1.4 risolto questo per me.

2

L'unico modo sono stato in grado di risolvere questo problema, per IE8 (che era l'unico con il problema) e altri browser è stato quello di mettere jQuery e la chiamata noConflict() nella testa subito dopo l'inizializzazione del altra libreria . In questo 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>

... seguito da qualsiasi altro script che utilizzano sia jQuery o Prototype.

2

Ho avuto un problema simile. La soluzione che sto attualmente utilizzando è di salvare la variabile $ in una variabile temporanea, caricando jquery (sto caricando jquery dal codice js), eseguendo codice dipendente da jquery (con jQuery.noConflict), l'impostazione della variabile $ indietro.

È sporco, ma sembra aver fatto il trucco per me.

La mia funzione che aggiunge jQuery (se necessario) è:

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; 
} 

Il loadToHead carichi semplicemente lo script nel tag testa da qualche parte e corre la funzione di callback quando lo script viene caricato.

La maggior parte di questo codice l'ho trovato online e lo ho twittato. Sfortunatamente non ricordo dove dare il merito fin da ora.

1

Appena avuto lo stesso problema. IE 8 non piace:

var jQuery = jQuery.noConflict(); 

cambiato in:

var jq = jQuery.noConflict(); 

ha funzionato bene.