2009-07-03 10 views
0

Gibt es einen Grund, warum der Klick in IE6 auf dem folgenden JQuery-Code nicht funktioniert? Siehe ... $ ('# toggleVAT'). Klicken (Funktion ... Es funktioniert in IE7 undjQuery IE6 klicken auf Problem

function switchButton(to){ 
    if(to === 'INC'){ 
    $('#toggleVAT').removeClass("exc"); 
    $('#toggleVAT').addClass("inc"); 
    $('#toggleVAT em').text("inc."); 
    } else { 
    $('#toggleVAT').addClass("exc"); 
    $('#toggleVAT').removeClass("inc"); 
    $('#toggleVAT em').text("exc."); 
    } 
} 

function switchPrices(){ 
    if($.cookie('VATMODE') == "INC"){ 
    $('.price .incVAT').show(); 
    $('.price .excVAT').hide(); 
    switchButton('INC'); 
    } else { 
    $('.price .incVAT').hide(); 
    $('.price .excVAT').show(); 
    switchButton('EX'); 
    } 
} 


$(function(){ 
    switchPrices(); 
    $('#toggleVAT').click(function(){ 
    if($.cookie('VATMODE') === 'INC'){ 
     $.cookie('VATMODE', 'EX'); 
     switchButton('EX'); 
    } else { 
     $.cookie('VATMODE', 'INC'); 
     switchButton('INC'); 
    } 
    switchPrices(); 
    return false; 
    }); 
}); 
? FF

auf IE6 switchPrices() läuft einmal, aber nicht den Code auszuführen, wenn ich auf #toggleVAT Ich benutze die letzte verkleinerte jQuery #toggleVAT ist nur ein Absatz Ich benutze IETester http://my-debugbar.com/wiki/IETester/HomePage Ich habe es vorher auf nativem IE6 überprüft und der Bahaviour war der selbe Ich habe auch mögliche CSS-Probleme als das Problem aussortiert bleibt ohne Sheet.

Antwort

1

Nur eine kleine Sache, IETester cannot read cookies. Dies könnte sich auf die Dinge auswirken. Obwohl Sie sagten, dass Sie in einem nativen IE6 getestet haben, ist es wahrscheinlich nicht das Problem, aber es ist wissenswert.

+0

Dies könnte eigentlich die Wurzel des Problems sein, die ursprüngliche Implementierung, die ich getestet habe auf nativen IE6 hatte keine Cookies. Das wurde später hinzugefügt. –

+0

Oder es könnte einen anderen Fehler haben, den ich behoben habe, der es kaputt gemacht hat. –

1

toggleVAT ein Link? Sehen Sie in der Callback falsch zurück.

$('#toggleVAT').click(function(){ 
     if($.cookie('VATMODE') === 'INC'){ 
      $.cookie('VATMODE', 'EX'); 
      switchButton('EX'); 
     } else { 
      $.cookie('VATMODE', 'INC'); 
      switchButton('INC'); 
     } 
     switchPrices(); 
     return false; 
    }); 

Dadurch verhindern Sie, dass das Standard-Klickverhalten ausgeführt wird.

+0

#toggleVAT ist kein Link, nur ein Absatz. Return false half auch nicht. Ich benutze IETester http://www.my-debugbar.com/wiki/IETester/HomePage. Es läuft JavaScript ziemlich gut. Ich habe es vorher auf nativem IE6 überprüft und das Verhalten war das gleiche. –

1

Ich erinnere mich, dass es Probleme gibt, wenn Sie mehrere (-> gehackte) IE-Versionen auf denselben Fenstern ausführen.

Auch wenn Sie die IE Developer Toolbar verwenden, überprüfen Sie, dass Cookies nicht deaktiviert werden.


Für mich funktioniert Ihr Code ohne Probleme in IE6, FF 3.0.11 und Opera 9.64.

Ich stellte eine kleine Probe zur Verfügung. Um zu testen, ob Sie den Fehler noch reproduzieren können.

http://pastebin.com/m7e8d87c6

jquery.js ->http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js

jquery.cookie.js ->http://plugins.jquery.com/files/jquery.cookie.js.txt

+0

hinzugefügt kleine Probe zu testen – jitter

1

Werden Sie nicht switchButton Code zweimal anrufen? Einmal im Click-Handler und zum zweiten Mal innerhalb der switchPrices-Funktion? Würde das nicht die Werte zurück in den ursprünglichen Zustand schalten?

Versuchen Sie folgendes:

Bist du nicht zweimal switchButtonc ode nennen? Einmal im Click-Handler und zum zweiten Mal innerhalb der switchPrices-Funktion?

Try this:

$(
    function() 
    { 
     $('#toggleVAT').click(
      function() 
      { 
       switchPrices(); 
       return false; 
      } 
      ); 
     switchPrices(); 
    } 
); 

function switchPrices() 
{ 
    var targetVatMode = $.cookie('VATMODE') == 'INC' ? 'EX' : 'INC'; 
    $.cookie('VATMODE', targetVatMode); 
    var removeClassName = targetVatMode == 'INC' ? 'exc' : 'inc'; 
    var addClassName = targetVatMode == 'INC' ? 'inc' : 'exc'; 
    var displayText = targetVatMode == 'INC' ? 'inc.' : 'exc.'; 

    var elementToShow = targetVatMode == 'INC' ? '.price .incVAT' : '.price .excVAT'; 
    var elementToHide = targetVatMode == 'INC' ? '.price .excVAT' : '.price .incVAT'; 

    $(elementToShow).show(); 
    $(elementToHide).hide(); 


    $('#toggleVAT') 
     .addClass(addClassName) 
     .removeClass(removeClassName) 
     .find('em') 
      .text(displayText); 
} 

Auch wenn Sie okie mit Vat-Modus als 'EXC' anstelle von 'EX' sind, können Sie sogar noch weiter den Code vereinfachen kann.

function switchPrices() 
{ 
    var oldVatMode = $.cookie('VATMODE'); 
    //Define your Vat mode as EXC instead of EX. 
    var newVatMode = oldVatMode == 'INC' ? 'EXC' : 'INC'; 
    $.cookie('VATMODE', newVatMode); 

$('#toggleVAT') 
     .addClass(newVatMode.toLowerCase()) 
     .removeClass(oldVatMode.toLowerCase()) 
     .find('em') 
      .text(newVatMode.toLowerCase() + '.'); 

    $('.price .' + newVatMode + 'VAT').show(); 
    $('.price .' + oldVatMode + 'VAT').hide(); 
} 
+0

Ihr 1. Stück funktioniert, aber nicht in IE6. Es ist ziemlich surreal, ich muss anfangen, über den Tellerrand hinaus zu denken. Ich habe gerade einen anderen IE Tester (multipleIEs von tredosoft) installiert und das Problem bleibt bestehen. Ich habe es ohne Stylesheets versucht, ich habe versucht, das ganze andere JavaScript zu entfernen.Ich habe hardcoded onclick = "switchPrices()" versucht. Kein Unterschied. –

+0

Nur eine wilde Vermutung, können Sie überprüfen, ob Sie den richtigen DOCTYPE für Ihre Seite einstellen? Ich frage mich, ob es aufgrund des Quirks-Modus des IE einen Bug geben könnte. – SolutionYogi

+0

XHTML-Übergang ohne den XML-Header, sind wir definitiv nicht im Quirks-Modus. Das Box-Modell ist ebenfalls standardkonform, also definitiv kein Quirks-Modus. –