繁体   English   中英

JavaScript插入位置

[英]JavaScript caret position

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

我已经测试了autoNumeric插件jQuery格式货币插件,但两者都在Android 2. *浏览器上有光标位置问题。

有没有人有与这个浏览器兼容的JavaScript解决方案?

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

我通常使用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);" />

获取和设置插入位置函数从这里得到: 在html文本框中设置键盘插入位置

我在Android 2.1模拟器上测试过它。 虽然模拟器速度很慢,但似乎工作正常。 你可以在这里找到截图: https//www.dropbox.com/s/9ximuwh64kadiea/shot.JPG?dl = 0

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

似乎回答你的需要,不是吗? 虽然没有在Android下测试它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM