2

我看过关于这个主题的各种帖子。我正在为文本框制作一个字符递减计数器(例如'98 Characters Left'),我可以让它触发的唯一事件是keydown(),但是当文本粘贴到文本框时它不会处理它。我尝试制作一个updateCharCount()功能并将其设置为每个事件(一次全部,并且每个单独:keyup,keydown,keypress,change。

我还尝试使用bind()and设置处理程序live()。如果我尝试同时为 keydown 和 keyup 设置处理程序,那么无论发生什么,无论发生什么,都不会触发,尽管我在任何地方都读到了这就是解决方案。这怎么可能?

另外,当我只处理keydown()事件时,我会遇到一些奇怪的行为。(顺便说一句,我的文本框上的 maxLength 属性设置为 100)如果我输入到最大字符数,退格一次或两次,然后再次输入到最大计数,即使它会显示 '1 Character(s) Left'已最大化,如果我从那里退格一次,它会显示“0 个字符”。这是我的代码:

function updateCharCount(){
    var clientmsg = $("#usermsg").val();
    var count = $("#usermsg").attr("maxLength") - clientmsg.length;
    $("#charsleft").html(count);
}
$("#usermsg").keydown(updateCharCount());

如果有人可以解释这种奇怪的行为会很好,但我真正想知道的是为什么如果 .change() 被如此广泛使用,它对我不起作用,也不 .bind('change', ... ) 或 .live('改变', ...)

4

2 回答 2

4

您可以使用.on()绑定多个事件(不推荐使用 bind 和 live),如下所示:

$("#usermsg").on({
    change: updateCharCount,
    keyup: updateCharCount,
    keydown: updateCharCount
})​

jsFiddle 示例

于 2012-09-06T15:19:40.220 回答
1

使用keyup而不是keydown在插入符号之前发生 keydown 。

仅当焦点离开该字段时,才会更改文本字段。如果发生了变化,但不是任何时候添加符号

Keyup 也将处理粘贴事件。

于 2012-09-06T15:16:29.887 回答