Pregunta

¿Hay alguna razón por la que el clic no funciona en IE6 en el siguiente código de jQuery? Ver ... $ ( '# toggleVAT'). Click (función ... Funciona en IE7 y 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;
    });
});

En switchPrices IE6 () se ejecuta una vez, pero no se ejecuta el código al hacer clic #toggleVAT. Estoy usando jQuery última minified. #toggleVAT es sólo un párrafo. Estoy usando IETester http://my-debugbar.com/wiki/IETester/HomePage. Lo he comprobado en el funcionamiento de forma nativa IE6 antes y el bahaviour era el mismo. También he rulled posibles problemas de CSS como el problema persiste sin hoja de estilo.

¿Fue útil?

Solución

Sólo una pequeña cosa, IETester no puede leer las cookies . Esto podría estar afectando a las cosas. Aunque, usted dijo que la prueba en un IE6 nativa, por lo que probablemente no es el problema, pero vale la pena conocer.

Otros consejos

Es toggleVAT un enlace? Trate de volver falsa en la devolución de llamada.

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

Hacer esto le impide el comportamiento por defecto clic en ejecución.

No son usted que llama código switchButton dos veces? Una vez dentro del controlador de clic y la segunda vez dentro de la función switchPrices? ¿No sería alternar los valores de nuevo a su estado original?

Prueba esto:

¿No se llama switchButtonc oda dos veces? Una vez dentro del controlador de clic y la segunda vez dentro de la función switchPrices?

Prueba esto:

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

Además, si usted es okie con el modo Vat como 'EXC' en lugar de 'EX', se puede simplificar el código aún más.

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

Recuerdo que hay problemas cuando se tiene múltiple. (-> hackeado) las versiones de IE que se ejecutan en las mismas ventanas

Además, si utiliza el cheque Developer Toolbar es decir, que no deshabilitar las cookies.


Para mí el código funciona sin problemas en IE6, FF 3.0.11 y Opera 9.64.

he proporcionado una pequeña muestra. Para probar si todavía se puede reproducir el error.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top