2010-05-13 16 views
7

Ich habe eine Website mit dem prootype Framework und ich bin auf der Suche nach einem jquery-Plugin. Alles funktioniert einfach nicht in IE8. Es funktioniert in ie7, was mich erstaunt. Irgendeine Idee, was vielleicht falsch ist?jquery noConflict funktioniert nicht nur in IE8

IE8 gibt mir Objekt unterstützt diese Eigenschaft oder Methode wo Zeile jQuery.noConflict();

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

ich folgendes auch müde: var $j = jQuery.noConflict(); var j = jQuery.noConflict();

everythig allein einfach nicht in IE8 funktioniert.

+1

Können Sie den vollständigen Code einschließlich wo Sie jquery und das noconflict-Plugin enthalten? –

+0

Ich bearbeite den Code. Ich habe das Skript src mit im Körper. – slik

+0

Dies scheint zu geschehen, wenn noConflict() mit einer Verzögerung aufgerufen wird. Siehe auch http://forum.jquery.com/topic/jquery-and-prototype-conflicts-in-ie-8-when-loading-jquery-after-settimeout-noconflict-doesn-t-help (Wartemoderation ab dem Zeitpunkt von diesem Kommentar) – ripper234

Antwort

1

Ive hatte ein simular Problem in der Vergangenheit und arbeitete um es von dem emulieren IE7 Meta-Tag mit

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

Ich bin nicht sicher, ob dies obwohl die beste Arbeit herum ist.

+1

Nimm das nicht persönlich, aber das ist eine schreckliche Idee. Die Funktion "noConflict" funktioniert in IE8 einwandfrei. – Pointy

0

Ich hatte in der Vergangenheit seltsame Probleme mit IE8 auf Computern mit mehreren Versionen von IE installiert. In meinem Fall ist ein Fehler aufgetreten, als ich versuchte, einen Link in einem neuen Fenster per Javascript zu öffnen. Der gleiche Code funktionierte gut auf IE6 und 7, und eine Maschine mit nur IE8 installiert lief es auch gut.

0

Dies ist ein Problem, das ich auch entdeckte. Die Art und Weise, wie ich es behoben habe, bestand darin, mein jQuery auf 1.4 zu bringen. Version 1.3.2 schlägt mit neueren Prototyp auf IE8 fehl. Entschuldigung, diese Antwort ist zu spät.

6

Ich habe in diesem auch mit jQuery-1.4.4.js gelaufen. Alles funktioniert gut außer in IE8. IE8 erkennt jQuery() nichts. Ich konnte das Problem lösen, indem ich jQuery lud und $ .noconflict() ausführte, bevor Prototype geladen wurde, und alles lief auf allen meinen Testbrowsern einschließlich IE8 gut. Diese Sequenz steht im Gegensatz zur jQuery-Dokumentation und deshalb bin ich nervös. Kann nichts auf der jQuery-Seite darüber finden.

t22harris

+0

Ich kann bestätigen, dass ich null Objekte Fehler mit jQuery 1.4.4 unter IE8 erhalten, wenn Prototype zuerst geladen wurde. Ich lade jetzt zuerst jQuery und mache sofort 'noConflict()' und jetzt funktioniert meine App wieder! –

+0

Danke, jQuery und den Aufruf '$ .noConflict()' vor den anderen Bibliotheken zu verschieben löste es auch für mich. Das gleiche Problem und die gleiche Lösung gelten für jQuery-1.5. Es scheint mir, als ob es mit dem Dokument verwandt ist. Erkennung für IE .. – meyertee

0

Ich habe den exakt gleichen Fehler mit 1.4.4 und 1.4.3 Laden jquery nach Prototyp und nur in IE8, auch nicht in IE7 oder Ie6 JQuery 1.4 das für mich gelöst.

2

Der einzige Weg, ich war in der Lage, dies zu beheben, für IE8 (das war der einzige mit dem Problem) und andere Browser waren jQuery und die noConflict() -Aufruf im Kopf sofort nach der Initialisierung der andere Bibliothek zu setzen . Wie so:

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

... gefolgt von irgendwelchen anderen Skripten, die entweder jQuery oder Prototype verwenden.

2

Ich hatte ein ähnliches Problem. Die Lösung, die ich momentan verwende, ist das Speichern der $ Variable in einer temporären Variable, das Laden von jquery (ich lade jquery von js code), das Ausführen von jquery-abhängigem Code (mit jQuery.noConflict), das Setzen der $ Variablen zurück.

Es ist schmutzig, aber es scheint der Trick für mich getan zu haben.

Meine Funktion, die jquery fügt hinzu (falls erforderlich) ist:

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

Die loadToHead lädt einfach das Skript in den Kopf-Tag irgendwo und führt die Callback-Funktion, wenn das Skript geladen wird.

Die meisten dieser Code habe ich online gefunden und tweeked es. Leider kann ich mich nicht erinnern, wo ich den Kredit jetzt geben soll.

1

hatte gerade das gleiche Problem. IE 8 nicht mag:

var jQuery = jQuery.noConflict(); 

verändert es an:

var jq = jQuery.noConflict(); 

hat gut funktioniert.