Проблема с кликом jQuery IE6
-
22-08-2019 - |
Вопрос
Есть ли какая-либо причина, по которой щелчок не работает в 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.
Я привел небольшой образец.Чтобы проверить, можете ли вы все еще воспроизвести ошибку.
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