2012-08-10 1 views
39

私はモバイルバンキングアプリケーションを開発しており、リアルタイムで通貨額の入力をフォーマットすることに興味があります。JavaScriptキャレットポジション

私は既にautoNumeric pluginjQuery Format Currency Pluginをテストしましたが、両方ともAndroid 2. *ブラウザでカーソル位置の問題があります。

誰にもこのブラウザと互換性のあるJavaScriptソリューションがありますか?

+1

数字のマスクで苦労した後、私は携帯電話のブラウザでそれらを無効にしなければなりませんでした。私が知る限りは、回避策はありません。 – devundef

+0

このバージョンのAndroidブラウザは、 'obj.selectionStart'と' obj.selectionEnd'を正しくサポートしていませんか? – scunliffe

+1

すでにjQueryを使用している場合は、jQuery ++を試してみましたか(タブをキャプチャしてキーを押した後にキャレットの位置を正しく配置するために使用しましたか?私はそれをテストしたときに素晴らしい作品。それにかかわらず、いつでもRange(範囲)メソッドとSelection(選択)メソッドを使用できます(jQueryを必要としません)。 jquerypp.com –

答えて

1

私はautoNumericについてわかりませんが、http://code.google.com/p/jquery-formatcurrency/はかなりよく見えます。あなたが投稿したjsFiddleの例では、デスクトップブラウザにキャレットが正しく配置されていませんが、これは私の(Jellybean)Android phoneでも同様です。 (ジンジャーブレッドでは、点滅するカーソルバーは、行の最後にジャンプするかもしれないが、それは最後にあった場所あなたはまだ編集されます。)彼らのデモを試してみてください:http://www.bendewey.com/code/formatcurrency/demo/format_as_you_type.html

+0

このプラグインには、Andoid 2. *ブラウザのカーソル位置の問題もあります。 –

-1

それはこのjQueryプラグインらしい - NumBoxを - ソリューションを提供することを目的とあなたの問題に。

+0

このプラグイン –

1

私は通常、あなたはそれが非常に使いやすいですhttp://openexchangerates.github.io/accounting.js/#download

からダウンロードすることができ accounting.js使用しています。同じダウンロードページからどのように動作するかを見ることができます。

私はカーソル管理を行うために使用するカップルのjavascript機能を作成しました:

 function formatMoney(myField){ 
      if(myField.selectionStart || myField.selectionStart == '0'){ 
       var len = myField.value.length; 
       var caretPos = doGetCaretPosition(myField); 
       myField.value = accounting.formatMoney(myField.value); 
       var newlen = myField.value.length; 
       setCaretPosition(myField, newlen != len ? (newlen > len ? caretPos + 1 : caretPos - 1) : caretPos); 
      } 
     } 
     function doGetCaretPosition (ctrl) { 

      var CaretPos = 0; 
      // IE Support 
      if (document.selection) { 

       ctrl.focus(); 
       var Sel = document.selection.createRange(); 

       Sel.moveStart ('character', -ctrl.value.length); 

       CaretPos = Sel.text.length; 
      } 
      // Firefox support 
      else if (ctrl.selectionStart || ctrl.selectionStart == '0') 
       CaretPos = ctrl.selectionStart; 

      return (CaretPos); 

     } 
     function setCaretPosition(elem, caretPos) { 
      elem.value = elem.value; 
      if(elem != null) { 
       if(elem.createTextRange) { 
        var range = elem.createTextRange(); 
        range.move('character', caretPos); 
        range.select(); 
       } 
       else { 
        if(elem.selectionStart) { 
         elem.focus(); 
         elem.setSelectionRange(caretPos, caretPos); 
        } 
        else 
         elem.focus(); 
       } 
      } 
     } 

あなたは、テキストフィールドに関数を使用することができます。

<input id="myField" type="text" onkeyup="formatMoney(this);" onChange="formatMoney(this);" onBlur="formatMoney(this);" /> 

取得および設定キャレット位置機能はここから入手しました:Set keyboard caret position in html textbox

私はAndroid 2.1エミュレータでそれをテストしました。エミュレータは遅かったが、動作していたようだ。あなたはここにスクリーンショットを見つけることができます。https://www.dropbox.com/s/9ximuwh64kadiea/shot.JPG?dl=0

+0

私はこのソリューションをAndroid 2.3.6デバイスでテストしましたが、残念ながらキャレットポジションの問題は残っています。 –

0

は、ここでオープンソースだし、うまく貢献し、うまくCOMMITEDライブラリ:https://github.com/plentz/jquery-maskmoney

はそれはない、あなたの必要性に答えるないように見えますか? しかし、Havent'tはAndroidでもテストしました。

+0

残念ながらそこにあるようですいくつかのAndroidの問題:https://github.com/plentz/jquery-maskmoney/issues?utf8=%E2%9C%93&q=android –

+1

私の悪い。次回に問題をチェックします。 –