[英]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.