解決方案需要照顧的光標位置跳到號結束在被編輯時中間,加上照顧逗號刪除和退格問題,其中退格或刪除刪除逗號只是被添加回來
<script type="text/javascript">
$(function() {
$("[type='tel']").keydown(function (event) {
var position = this.selectionStart;
var $this = $(this);
var val = $this.val();
if (position == this.selectionEnd &&
((event.keyCode == 8 && val.charAt(position - 1) == "," && val.substr(0, position - 1).indexOf(".") == -1)
|| (event.keyCode == 46 && val.charAt(position) == "," && val.substr(0, position).indexOf(".") == -1))) {
event.preventDefault();
if (event.keyCode == 8) {
$this.val(val.substr(0, position - 2) + val.substr(position));
position = position - 2;
} else {
$this.val(val.substr(0, position) + val.substr(position + 2));
}
$this.trigger('keyup', { position: position });
} else {
this.dispatchEvent(event);
}
});
$("[type='tel']").keyup(function(event, args) {
if (event.which >= 37 && event.which <= 40) {
event.preventDefault();
}
var position = args ? args.position : this.selectionStart;
var $this = $(this);
var val = $this.val();
var parts =val.split(".");
var valOverDecimalPart = parts[0];
var commaCountBefore = valOverDecimalPart.match(/,/g) ? valOverDecimalPart.match(/,/g).length : 0;
var num = valOverDecimalPart.replace(/[^0-9]/g, '');
var result = parts.length == 1 ? num.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,") : num.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,") +"."+ parts[1].replace(/[^0-9.]/g,"");
$this.val(result);
var commaCountAfter = $this.val().match(/,/g) ? $this.val().match(/,/g).length : 0;
position = position + (commaCountAfter - commaCountBefore);
this.setSelectionRange(position, position);
});
});
</script>
不起作用,我的瀏覽器被吊死:D! – Shahin 2011-05-25 08:06:39
我剛測試過,工作正常。你使用的是什麼瀏覽器? 看到http://jsfiddle.net/BrUVq/1/ – troynt 2011-05-25 08:13:14
我想在這些事件fromat:更改keyup keydown粘貼模糊 你會編輯你的代碼嗎? – Shahin 2011-05-25 08:22:30