对于以下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问题,因为问题在没有样式表的情况下仍然存在。
答案 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中没有问题。
我提供了一个小样本。测试你是否仍然可以重现错误。
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中测试过,所以它可能不是问题,但是值得了解。