我正在开发一款移动银行应用,对实时格式化货币金额输入很感兴趣。
我已经测试了autoNumeric插件和jQuery格式货币插件,但在Android 2.*浏览器上都存在光标位置问题。
有没有人能提供一个适用于这些浏览器的JavaScript解决方案呢?
我正在开发一款移动银行应用,对实时格式化货币金额输入很感兴趣。
我已经测试了autoNumeric插件和jQuery格式货币插件,但在Android 2.*浏览器上都存在光标位置问题。
有没有人能提供一个适用于这些浏览器的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
我不知道autoNumeric,但是http://code.google.com/p/jquery-formatcurrency/看起来很不错。你发布的jsFiddle示例在我的桌面浏览器上没有正确地放置插入符号,但这个链接可以,在我的(果冻豆)Android手机上也可以。(在姜饼上,闪烁的光标条可能会跳到行末,但您仍将编辑它最后所在的位置。)试试他们的演示:http://www.bendewey.com/code/formatcurrency/demo/format_as_you_type.html
这里有一个开源的、贡献良好、承诺良好的库:https://github.com/plentz/jquery-maskmoney
看起来它可以满足你的需求,不是吗? 不过还没有在 Android 下测试过。
看起来这个 jQuery 插件 - NumBox - 旨在为您的问题提供解决方案。
type="number"
属性?最近浏览器的一系列更改已经引起了问题。1.) Chrome 已经从数字字段中“删除”了selection*
属性/方法(因此使用 JavaScript 进行操作的尝试非常有限),2.) Firefox 最近将验证与数字字段绑定,因此将"4."
设置为部分值将失败,并且实际上会清空该字段,3.) Firefox 的最新验证现在使<input type="number"/>
仅限于整数 - 您必须添加step="any"
才能输入小数值。 - scunliffe