cmd/cntrl + a 不适用于 jquery 极限函数

cmd/cntrl + a doesnt work on jquery limit function

我有一个带计数的 jquery 输入框字符限制器,但是当我尝试 cmd/cntrl + a(highlight/select 全部)在输入框中不起作用时,它会闪烁一个第二然后消失。不知道为什么会这样。 See fiddle

这是我的 jquery

var maxchars = 10;
$('#post_text').keyup(function () {
    var tlength = $(this).val().length;
    $(this).val($(this).val().substring(0, maxchars));
    var tlength = $(this).val().length;
    remain = maxchars - parseInt(tlength);
    $('#remain').text(remain);
});

和html

<span id="remain">10</span> characters remaining
<br />
<input type="text" class="form-control input-lg auto-size"
    placeholder="What would you like to post?"
    name="post_text" id="post_text">

在我的例子中它确实可以工作 (Firefox 40.0.3)。但是,它可能不适用于其他一些浏览器。很有可能和keyup函数有关。

keyup(...)替换为bind('input',...):

var maxchars = 10;
$('#post_text').bind('input',function () {
    var tlength = $(this).val().length;
    $(this).val($(this).val().substring(0, maxchars));
    var tlength = $(this).val().length;
    remain = maxchars - parseInt(tlength);
    $('#remain').text(remain);
});

我会检查您按下的字符。 'Ctrl' 键的字符代码是 17,下面的代码使用一个标志来表示如果 'ctrl' 被按下则不检查输入长度。让我知道这是否适合你。

var maxchars = 10;
$('#post_text').keydown(function (e) {
    var checkInput = true;
    if (e.which == 17) {
        checkInput = false;   
    }
    if (checkInput){
        var tlength = $(this).val().length;
        $(this).val($(this).val().substring(0, maxchars));
        var tlength = $(this).val().length;
        remain = maxchars - parseInt(tlength);
        $('#remain').text(remain);
    }
});

------------编辑-------------

我倾向于做的实际上是向输入标签添加一个 maxlen 属性,如 maxlen="10" 这样您就不必检查输入长度,而只需更新输入标签 - “剩余 10 个字符”