JavaScript插入位置

时间:2012-08-10 11:02:51

标签: javascript android jquery mobile cross-browser

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

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

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

4 个答案:

答案 0 :(得分:1)

我不知道autoNumeric,但http://code.google.com/p/jquery-formatcurrency/看起来很不错。您发布的jsFiddle示例并未将插入符号正确放置在我的桌面浏览器上,但这样做,以及我的(Jellybean)Android手机上也是如此。 (在Gingerbread上,闪烁的光标栏可能会跳到行的末尾,但您仍然会在最后的位置进行编辑。)尝试他们的演示:http://www.bendewey.com/code/formatcurrency/demo/format_as_you_type.html

答案 1 :(得分: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

答案 2 :(得分:0)

这是一个开源,贡献良好,做得很好的库:https://github.com/plentz/jquery-maskmoney

似乎回答你的需要,不是吗? 尚未在Android下测试过它。

答案 3 :(得分:-1)

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