2011-08-08 16 views
0

私には小さな問題があります。IE8以前のjavascript/jqueryフォーカスの問題

現在、私は入力テキストフィールドのフォーカス/ぼかし上の通貨をフォーマットするための以下の機能を持っている:

jsfiddle

$('.number').bind({ 
     focus: function() { 
      $(this).val('$' + $(this).val()); 
     }, 
     blur: function() { 
      var defVal = $(this)[0].defaultValue; 
      var dollars = $(this).val(); 
      dollars = dollars.replace('$', ''); 
      dollars = dollars.replace(',', ''); 
      dollars = parseFloat(dollars).toFixed(2); 
      if (!(isNaN(dollars))) { 
      $(this).val(dollars); 
      } else {$(this).val(defVal).removeClass('inpt_validBlur');}; 
     } 
    }); 

これは、Firefox、Safariの、およびIE9に希望と同じように動作し、以前のバージョンのIEには問題があります。 IEでは、あなたが入力を開始すると、テキストはドル記号の前に来ます。誰もがこれの理由とそれを回避する方法を知っていますか?

ありがとうございます

+0

「n」を定義しますが、使用しません。また、 'n'と' dollars'はあなたが常に行うべき 'var'で定義されていません。 – pimvdb

+0

修正済み、ありがとうございます。私はあなたがフィドルを追加したのを見ます...デモ目的のためだけですか?あなたはそのような投稿を作成するときに私はそれを提案するのですか? – Ortal

+0

常に良いアイデアです。ここにクラスhttp://jsfiddle.net/mplungjan/mwSsC/ – mplungjan

答えて

0

これは私のために働いているようです。完璧ではない、と私は本当にjavascriptとjqueryを混ぜるのが好きではないが、それは動作します。

$('.inpt').focus(function() { 
     var dollars = $(this).val(); 
     var defVal = $(this)[0].defaultValue; 
     $(this).removeClass('inpt').addClass('inpt_Focus'); 
     if ($(this).val() === defVal || $(this).val() === '$') { 
      $(this).val(''); 
     } 
     if ($(this).hasClass('number')) { 
      $(this).val('$' + $(this).val()); 
      var elemLen = $(this).length; 
      if (document.selection) { 
       var oSel = document.selection.createRange(); 
       oSel.moveStart('character', -elemLen); 
       oSel.moveStart('character', elemLen); 
       oSel.moveEnd('character', 0); 
       oSel.select(); 
      } 
     } 
    });