41

我正在开发一个移动银行应用程序,我对实时格式化货币金额输入感兴趣。

我已经测试了 autoNumeric 插件jQuery Format Currency 插件,但两者都在 Android 2.* 浏览器上存在光标位置问题。

有人有与此浏览器兼容的 JavaScript 解决方案吗?

4

4 回答 4

1

I don't know about autoNumeric, but http://code.google.com/p/jquery-formatcurrency/ looks pretty good. The jsFiddle example you posted doesn't place the caret correctly on my desktop browser, but this does, and on my (Jellybean) Android phone as well. (On Gingerbread, the blinking cursor bar may jump to the end of the line, but you will still be editing where it last was.) Try their demo: http://www.bendewey.com/code/formatcurrency/demo/format_as_you_type.html

于 2012-09-04T10:57:47.057 回答
1

我一般用accounting.js 可以从http://openexchangerates.github.io/accounting.js/#download下载

它很容易使用。您可以从同一个下载页面查看它的工作原理。

我创建了几个用于进行光标管理的 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

于 2015-03-23T06:37:10.773 回答
0

这是一个开源、贡献良好、承诺良好的库:https ://github.com/plentz/jquery-maskmoney

似乎可以满足您的需求,不是吗?不过还没有在Android下测试过。

于 2015-03-23T23:40:29.940 回答
-1

似乎这个 jQuery 插件 - NumBox - 旨在为您的问题提供解决方案。

于 2015-03-21T08:48:38.400 回答