Вопрос

Есть ли какая-либо причина, по которой щелчок не работает в IE6 в следующем коде jQuery?Смотрите ...$('#переключать').щелкните (функция...Это работает в 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 .Я использую последнюю версию уменьшенного jQuery.#toggleVAT - это всего лишь абзац.Я использую IETester http://my-debugbar.com/wiki/IETester/HomePage.Я проверил это на изначально запущенном IE6 ранее, и поведение было таким же.Я также исключил возможные проблемы с CSS, поскольку проблема сохраняется без таблицы стилей.

Это было полезно?

Решение

Просто мелочь, IETester не может читать файлы cookie.Это может повлиять на ход событий.Хотя вы сказали, что тестировали в родном IE6, так что, вероятно, проблема не в этом, но об этом стоит знать.

Другие советы

Является ли toggleVAT ссылкой?Попробуйте вернуть false при обратном вызове.

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

Делая это, вы предотвращаете выполнение поведения щелчка по умолчанию.

Разве ты не вызываешь код кнопки переключения дважды?Один раз внутри обработчика щелчков и второй раз внутри функции switchPrices?Разве это не вернуло бы значения в исходное состояние?

Попробуй это:

Разве ты не вызываешь switchButtonc ode дважды?Один раз внутри обработчика щелчков и второй раз внутри функции 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);
}

Кроме того, если вас устраивает режим НДС как '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();
}

Я вспоминаю, что возникают проблемы, когда у вас несколько (--> взломанных) Версий IE, работающих в одной и той же Windows.

Также, если вы используете панель инструментов разработчика IE, убедитесь, что она не отключает файлы 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top