2009-07-03 79 views
0

是否有任何理由爲什麼點擊不能在IE6下面的JQuery代碼中工作?請參閱... $( '#toggleVAT')。點擊(函數...它工作在IE7和FF?jQuery IE6點擊問題

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中測試過,所以這可能不是問題,但值得了解。

1

是toggleVAT鏈接?嘗試在回調返回false。

$('#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是一樣的。 – 2009-07-03 17:31:08

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 2009-07-04 08:16:27

1

是不是你打電話switchButton代碼兩次?一旦進入click處理程序,第二次進入switchPrices函數?這不會將這些值切換回原始狀態嗎?

試試這個:

是不是你打電話switchButtonc頌兩次?一旦進入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); 
} 

另外,如果你是okie增值稅模式爲「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測試器(來自tredosoft的多個IE),問題依然存在。我試過沒有樣式表,我試過剝離所有其他的JavaScript。我試過硬編碼onlclick =「switchPrices()」。沒有不同。 – 2009-07-03 19:20:39

+0

只是一個瘋狂的猜測,你可以檢查你是否爲你的頁面設置正確的DOCTYPE?我想知道可能是由於IE的Quirks模式造成的錯誤。 – SolutionYogi 2009-07-03 19:38:41