2009-07-03 5 views
0

Y at-il une raison pour laquelle le clic ne fonctionne pas dans IE6 sur le code JQuery suivant? Voir ... $ ('# toggleVAT'). Cliquez sur (fonction ... Il fonctionne dans IE7 et FF?jQuery IE6 cliquez sur le problème

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

Sur IE6 switchPrices() exécute une fois, mais il n'exécute pas le code lorsque je clique sur #toggleVAT.J'utilise le dernier jQuery minifié #toggleVAT est juste un paragraphe.J'utilise IETester http://my-debugbar.com/wiki/IETester/HomePage. Je l'ai vérifié sur IE6 en cours d'exécution avant et le bahaviour était le même.J'ai également résolu les problèmes CSS possibles que le problème perdurera sans stylesheet.

Répondre

1

Juste une petite chose, IETester cannot read cookies. Cela pourrait affecter les choses. Bien, vous avez dit que vous avez testé dans un IE6 natif, donc ce n'est probablement pas le problème, mais il vaut la peine d'être informé.

+0

Cela pourrait être en fait la racine du problème, la mise en œuvre originale j'ai testé sur IE6 natif n'avait pas de cookies. Cela a été ajouté plus tard. –

+0

Ou il peut avoir une autre erreur que j'ai corrigé qui l'a rendu cassé. –

1

est-toggleVAT un lien? Essayez de revenir faux dans le rappel.

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

Ce faisant, vous empêchez le comportement de clic par défaut en cours d'exécution.

+0

#toggleVAT n'est pas un lien, juste un paragraphe. Retour faux n'a pas aidé non plus. J'utilise IETester http://www.my-debugbar.com/wiki/IETester/HomePage. Il fonctionne assez bien avec JavaScript. Je l'ai vérifié sur IE6 fonctionnant nativement avant et le comportement était le même. –

1

Je rappelle qu'il y a des problèmes lorsque vous avez plusieurs versions IE (-> piratées) s'exécutant sur les mêmes fenêtres. De plus, si vous utilisez IE Developer Toolbar, vérifiez qu'il ne désactive pas les cookies.


Pour moi, votre code fonctionne sans problème dans IE6, FF 3.0.11 et Opera 9.64.

J'ai fourni un petit échantillon. Pour tester si vous pouvez toujours reproduire l'erreur.

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

a ajouté un petit échantillon pour tester – jitter

1

N'êtes-vous pas appeler du code SwitchButton deux fois? Une fois dans le gestionnaire de clic et une seconde fois dans la fonction switchPrices? Cela ne changerait-il pas les valeurs à l'état d'origine?

Essayez ceci:

N'êtes-vous pas appelez ode switchButtonc deux fois? Une fois dans le gestionnaire de clic et une seconde fois dans la fonction switchPrices?

Essayez ceci:

$(
    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); 
} 

Aussi, si vous êtes okie avec le mode Vat comme 'EXC' au lieu de 'EX', vous pouvez simplifier le code encore plus loin.

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

Votre 1ère pièce fonctionne, mais pas dans IE6. C'est assez surréaliste, je dois commencer à penser hors de la boîte. Je viens d'installer un autre testeur IE (multipleIEs de tredosoft) et le problème persiste. J'ai essayé sans feuilles de style, j'ai essayé de dépouiller tous les autres JavaScript.J'ai essayé hardcoded onlclick = "switchPrices()". Aucune différence. –

+0

Juste une supposition sauvage, pouvez-vous vérifier si vous définissez le bon DOCTYPE pour votre page? Je me demande s'il pourrait y avoir un bug dû au mode Quirks d'IE. – SolutionYogi

+0

XHTML transitoire sans en-tête XML, nous ne sommes définitivement pas en mode quirks. Le modèle de boîte est conforme à la norme aussi, donc certainement pas le mode quirks. –