1

jsfiddle:http: //jsfiddle.net/ztNHL/3/

选择顶部的输入,然后跳到第二个。它会将光标放在值的末尾,而不是全选。如果您删除 javascript 并再次运行,您会看到此行为不会发生。

毫无头绪。

4

4 回答 4

2

没有什么奇怪的。keyup事件对TAB您的代码做出反应并执行

this.value = this.value.replace(/[^0-9\.]/g, "");

女巫更新输入字段的值。这就是为什么它首先选择该字段,然后删除选择。

于 2012-07-05T21:46:06.243 回答
2
$(function() {
    $('.numbersOnly').keyup(function (evt) {
        if ($.inArray(evt.which, [37, 38, 39, 40]) != -1) return false;
            this.value = this.value.replace(/[^\d\.]/g,'');
            if (evt.which == 9) this.select(); //<-- re-select field value
    });
});            
​

我做了一些其他的修改:

  • 模式变短(使用\d别名)
  • 光标键被重新启用(在您的代码中它们被阻止工作)
  • 选择仅在按下 tab 键时才会发生,而不仅仅是任何键
于 2012-07-05T21:47:34.340 回答
2

嗨,还有其他一些问题,例如:

工作演示顺利:http: //jsfiddle.net/wWxVL/2/

  • 左箭头键不起作用。
  • 当用户键入时,这些东西有点古怪。
  • 选项卡/选择所有问题(已知)

这里有一篇很棒的帖子:如何使用 jQuery 在 HTML 输入框中只允许数字 (0-9)?

希望有帮助,加油

代码

$(document).ready(function() {
    $(".numbersOnly").keydown(function(event) {
        // Allow: backspace, delete, tab, escape, and enter
        if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
        // Allow: Ctrl+A
        (event.keyCode == 65 && event.ctrlKey === true) ||
        // Allow: home, end, left, right
        (event.keyCode >= 35 && event.keyCode <= 39)) {
            // let it happen, don't do anything
            return;
        }
        else {
            // Ensure that it is a number and stop the keypress
            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
                event.preventDefault();
            }
        }
    });
});​
于 2012-07-05T21:48:49.063 回答
1

当我(在 chrome 中)标签到第二个框时,它不会到达值的末尾,直到我放开标签键(即在 keyup 上)

this.value = this.value.replace(/[^0-9\.]/g,'');

当您放开 tab 键时正在执行

于 2012-07-05T21:47:05.270 回答