jQuery IE6点击问题

时间:2009-07-03 16:50:27

标签: jquery cookies click internet-explorer-6

对于以下JQuery代码,在IE6中单击不起作用是否有任何原因?请参阅... $('#toggleVAT')。单击(功能......它适用于IE7和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;
    });
});

在IE6上,switchPrices()运行一次,但是当我点击#toggleVAT时它不会执行代码。我正在使用最新的minified jQuery。 #toggleVAT只是一个段落。我正在使用IETester http://my-debugbar.com/wiki/IETester/HomePage。我之前在本机上运行IE6检查了它,并且bahaviour是相同的。我还解决了可能的CSS问题,因为问题在没有样式表的情况下仍然存在。

4 个答案:

答案 0 :(得分:1)

toggleVAT是一个链接吗?尝试在回调中返回false。

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

这样做可以防止正在执行的默认点击行为。

答案 1 :(得分:1)

我记得当你在同一个窗口上运行多个( - >黑客)IE版本时会出现问题。

此外,如果您使用IE Developer Toolbar检查它是否禁用cookie。


对我来说,你的代码在IE6,FF 3.0.11和Opera 9.64中没有问题。

我提供了一个小样本。测试你是否仍然可以重现错误。

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

答案 2 :(得分:1)

你不是两次调用switchButton代码吗?一旦进入click处理程序并第二次进入switchPrices函数?那不会将值切换回原始状态吗?

试试这个:

你不是两次打电话给switchButtonc ode吗?一旦进入click处理程序并第二次进入switchPrices函数?

试试这个:

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

另外,如果您使用Vat Mode作为'EXC'而不是'EX',则可以进一步简化代码。

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

答案 3 :(得分:1)

只是一件小事,IETester cannot read cookies。这可能会影响事情。虽然,你说你在原生IE6中测试过,所以它可能不是问题,但是值得了解。