Question

Y at-il des raisons pour lesquelles le clic ne fonctionne pas dans IE6 sur le code suivant JQuery? Voir ... $ ( '# toggleVAT'). Cliquez sur (fonction ... Il fonctionne dans IE7 et FF?

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

switchPrices IE6 () exécute une fois, mais il n'exécute pas le code lorsque je clique sur #toggleVAT. J'utilise le dernier minified jQuery. #toggleVAT est juste un paragraphe. J'utilise IETester http://my-debugbar.com/wiki/IETester/HomePage. Je l'ai vérifié sur IE6 fonctionne de façon native avant et le bahaviour était le même. J'ai aussi rulled des éventuels problèmes CSS que le problème persiste sans stylesheet.

Était-ce utile?

La solution

Juste une petite chose, IETester ne peut pas lire les cookies . Cela pourrait avoir une incidence sur les choses. Bien que, vous avez dit que vous avez testé dans un IE6 natif, il est donc probablement pas la question, mais il est bon de savoir au sujet.

Autres conseils

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

Faire cela vous empêchez le comportement de clic par défaut en cours d'exécution.

ne sont pas vous appelle code SwitchButton deux fois? Une fois à l'intérieur du gestionnaire de clic et la deuxième fois dans la fonction switchPrices? Ne serait-ce les valeurs basculer à l'état d'origine?

Essayez ceci:

N'êtes-vous pas appelez ode switchButtonc deux fois? Une fois à l'intérieur du gestionnaire de clic et la deuxième 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);
}

En outre, 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();
}

Je me souviens qu'il ya des problèmes lorsque vous avez plusieurs. (-> piraté) versions IE fonctionnant sur les mêmes fenêtres

Aussi, si vous utilisez IE Developer Toolbar vérifier qu'il ne désactive pas les cookies.


Pour moi votre code fonctionne sans problèmes 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top