jQuery change()事件 - 不是用bind(),live(),keyup + keydown + keypress,什么都没有

时间:2012-09-06 15:13:47

标签: javascript jquery ajax

我已经查看了有关此主题的各种帖子。我正在为一个文本框创建一个字符向下计数器(例如'98 Characters Left'),我唯一可以触发它的事件是keydown(),但是当文本粘贴到它时它不处理它文本框。我已经尝试制作updateCharCount()函数并将其设置为每个事件(一次全部,每个事件:keyup,keydown,keypress,change。

我还尝试使用bind()live()设置处理程序。如果我尝试为keydown&设置处理程序同时,没有任何火灾,变化只是简单的根本不起火,无论什么,虽然我读到的任何地方都是解决方案。怎么会这样?

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

<强> jsFiddle example

答案 1 :(得分:1)

使用keyup代替keydown,因为在插入符号之前会发生keydown。

仅当焦点离开该字段时,才会发生带文本字段的更改。如果有什么变化,但不是任何时候你添加一个符号

Keyup还将处理粘贴事件。