jQuery IE6 problema click
-
22-08-2019 - |
Domanda
C'è qualche motivo per cui lo scatto non funziona in IE6 sul seguente codice jQuery? Vedi ... $ ( '# toggleVAT'). Clic (funzione ... Funziona in IE7 e 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;
});
});
On switchPrices IE6 () viene eseguito una volta, ma non esegue il codice quando clicco #toggleVAT. Sto usando jQuery ultima minified. #toggleVAT è solo un paragrafo. Sto usando IETester http://my-debugbar.com/wiki/IETester/HomePage. Ho controllato su nativamente in esecuzione IE6 prima e il bahaviour era lo stesso. Ho anche rulled evidenziare eventuali problemi di CSS come il problema persiste, senza foglio di stile.
Soluzione
Solo una piccola cosa, IETester non può leggere i cookie . Questo potrebbe essere influenzando le cose. Anche se, hai detto che testato in un IE6 nativo, quindi probabilmente non è il problema, ma vale la pena conoscere.
Altri suggerimenti
E 'toggleVAT un link? Prova ritorno false nel callback.
$('#toggleVAT').click(function(){
if($.cookie('VATMODE') === 'INC'){
$.cookie('VATMODE', 'EX');
switchButton('EX');
} else {
$.cookie('VATMODE', 'INC');
switchButton('INC');
}
switchPrices();
return false;
});
In questo modo si evita il comportamento di default click in corso di esecuzione.
Non stai chiamando il codice switchButton due volte? Una volta all'interno del gestore di clic e la seconda volta all'interno della funzione switchPrices? Non sarebbe alternare i valori allo stato originale?
Prova questo:
Non stai chiamando switchButtonc ode due volte? Una volta all'interno del gestore di clic e la seconda volta all'interno della funzione switchPrices?
Prova questo:
$(
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);
}
Inoltre, se si è nella norma con la modalità Iva come 'EXC' invece di 'EX', è possibile semplificare il codice ancora di più.
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();
}
Ricordo che ci sono problemi quando si dispone di più. (-> hacked) versioni di IE in esecuzione sugli stessi finestre
Anche se si utilizza il controllo Developer Toolbar IE che non si disabilita i cookie.
Per quanto mi riguarda il codice funziona senza problemi IE6, FF 3.0.11 e Opera 9.64.
ho fornito un piccolo campione. Per verificare se è ancora possibile riprodurre l'errore.
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