2009-07-03 21 views
0

次のJQueryコードでIE6でクリックが機能しない理由はありますか?見る$( '#のtoggleVAT')。クリックしてください(関数が...それはIE7で動作し、IE6のswitchPricesで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; 
    }); 
}); 

は()を1回実行されますが、私がクリックしたとき、それはコードを実行しません#toggleVAT。最新のjQueryを使用しています。#toggleVATは単なる段落です。IETester http://my-debugbar.com/wiki/IETester/HomePageを使用しています。以前はIE6をネイティブに実行していましたが、bahaviourは同じでした。スタイルシートなしで持続する。

答えて

1

ほんの少し、IETester cannot read cookies。これは物事に影響を与える可能性があります。あなたはネイティブのIE6でテストしたと言いましたが、それはおそらく問題ではありませんが、それについて知る価値はあります。

+0

これは実際にテストした元々の実装ネイティブのIE6にはCookieがありませんでした。それは後で追加されました。 –

+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; 
    }); 

これを実行すると、デフォルトのクリック動作が実行されなくなります。

+0

#toggleVATはリンクではなく、単なる段落です。偽を返しても役に立たなかった。私はIETester http://www.my-debugbar.com/wiki/IETester/HomePageを使用しています。それはJavaScriptをかなりうまく実行します。以前はIE6をネイティブに実行していたので、それをチェックしたところ、バハビールは同じでした。 –

1

複数の( - >ハッキングされた)IEバージョンが同じウィンドウで実行されているときに問題があることを思い出してください。

また、IE Developer Toolbarを使用する場合、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関数内でクリックハンドラと2回目の内部に入ったら?値を元の状態に戻すことはできませんか?

これを試してみてください:

を使用すると、二回switchButtoncの頌歌を呼び出していませんか? switchPrices関数内でクリックハンドラと2回目の内部に入ったら?

はこの試してみてください:あなたの代わりに「EX」の「EXC」としてバットモードとokieしている場合も

$(
    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); 
} 

を、あなたはさらにコードを単純化することができます。

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

1番目の作品は動作しますが、IE6では動作しません。それは非常に現実的です、私は箱から考え始める必要があります。私はちょうど別のIEテスター(tredosoftからのmultipleIEs)をインストールしましたが、問題は解決しません。私はスタイルシートなしで試してみたが、私は他のすべてのJavaScriptを取り除こうとした。私はハードコードされたonlclick = "switchPrices()"を試みました。変わりはない。 –

+0

あなたのページに正しいDOCTYPEを設定しているかどうか確認できますか? IEのQuirksモードのためにバグが発生する可能性があります。 – SolutionYogi

+0

XMLヘッダーのないXHTMLトランジションは、間違いなくクォークモードではありません。ボックスモデルも標準に準拠しているので、間違いなくクォークモードではありません。 –