2009-07-03 5 views
0

Есть ли причина, по которой клик не работает в IE6 на следующем коде JQuery? Смотрите ... $ ('# toggleVAT'). Выберите (функция ... Она работает в IE7 и FF?jQuery IE6 click problem

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 раньше, и bahaviour был таким же. Я также рассмотрел возможные проблемы CSS как проблему сохраняется без таблицы стилей.

ответ

1

Всего лишь небольшая вещь, IETester cannot read cookies. Это может повлиять на вещи. Хотя, вы сказали, что вы протестировали в родном IE6, так что это, вероятно, не проблема, но об этом стоит знать.

+0

Это может быть на самом деле корень проблемы, первоначальная реализация, которую я тестировал на родной IE6 не было файлов cookie. Это было добавлено позже. –

+0

Или у меня может быть какая-то другая ошибка, которую я исправил, и отбросил ее. –

1

ли toggleVAT ссылки? Попробуйте возвращение ложно в функции обратного вызова.

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

В результате этого вы предотвращаете выполнение кликов по умолчанию.

+0

#toggleVAT - это не ссылка, просто абзац. Возвращение false тоже не помогло. Я использую IETester http://www.my-debugbar.com/wiki/IETester/HomePage. Он работает JavaScript довольно хорошо. Я проверил его на начальном запуске IE6 раньше, и bahaviour был таким же. –

1

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

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

+0

добавлен небольшой образец для тестирования – jitter

1

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

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

Вы не вызывая switchButtonc оду дважды? Как только внутри обработчика кликов и второй раз внутри функции 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(); 
} 
+0

Ваша первая часть работает, но не в IE6. Это довольно сюрреалистично, я должен начать думать из коробки. Я только что установил еще один тестер IE (multipleIEs от tredosoft), и проблема не устранена. Я пробовал без таблиц стилей, я попытался удалить все остальные JavaScript.Я пробовал hardcoded onlclick = "switchPrices()". Нет разницы. –

+0

Просто дикая догадка, можете ли вы проверить, правильно ли вы настроили DOCTYPE для своей страницы? Мне интересно, что может быть ошибка из-за режима Quirks IE. – SolutionYogi

+0

XHTML переходный без заголовка XML, мы определенно не в режиме quirks. Модель коробки также стандартно совместима, поэтому определенно не причудливый режим. –