Javascript jQuery-在输入字段上绑定多个事件

Javascript jQuery-在输入字段上绑定多个事件,javascript,forms,jquery,Javascript,Forms,Jquery,我想知道在表单字段上绑定一个change()事件是否足以在字段值更改时正确执行操作 或者我应该绑定所有可能的事件?像这样: $(this).bind('change keyup focus click keydown', function(){ // ... }).change(); 另外,绑定多个事件是否会影响性能?我认为没有性能损失,除非您在处理程序中执行非常缓慢的操作。我认为没有性能损失,除非您在处理程序中执行非常缓慢的操作。每个事件发生在不同的时间。可能会

我想知道在表单字段上绑定一个
change()
事件是否足以在字段值更改时正确执行操作

或者我应该绑定所有可能的事件?像这样:

    $(this).bind('change keyup focus click keydown', function(){
       // ...
    }).change();

另外,绑定多个事件是否会影响性能?

我认为没有性能损失,除非您在处理程序中执行非常缓慢的操作。

我认为没有性能损失,除非您在处理程序中执行非常缓慢的操作。

每个事件发生在不同的时间。可能会有一些重叠,但是根据您所做的工作,它们可能会非常不同。例如,
keyup
事件发生在
输入上的值已经更新之后。而
向下键
以前发生过。这可以使您停止输入文本框中的值


就性能而言,在本例中,您正在为五个不同的事件运行代码。与单个事件相比。至少您的代码应该区分事件之间的重叠。

每个事件发生在不同的时间。可能会有一些重叠,但是根据您所做的工作,它们可能会非常不同。例如,
keyup
事件发生在
输入上的值已经更新之后。而
向下键
以前发生过。这可以使您停止输入文本框中的值


就性能而言,在本例中,您正在为五个不同的事件运行代码。与单个事件相比。至少您的代码应该区分事件之间的重叠。

只听
更改事件可能就足够了(另请参见)。从:

当元素的值更改时,
change
事件被发送到元素。此事件仅限于
元素、
框和
元素。对于选择框、复选框和单选按钮,当用户使用鼠标进行选择时会立即触发事件,但对于其他元素类型,事件会延迟到元素失去焦点为止


仅听
更改
事件可能就足够了(另请参见)。从:

当元素的值更改时,
change
事件被发送到元素。此事件仅限于
元素、
框和
元素。对于选择框、复选框和单选按钮,当用户使用鼠标进行选择时会立即触发事件,但对于其他元素类型,事件会延迟到元素失去焦点为止


change
仅当字段失去焦点时才会触发(对于大多数输入)。如果您想要更实时一点的内容,请使用HTML5
oninput
事件。这几乎可以捕获输入元素的任何类型的值更改(它也会冒泡!)。虽然Internet Explorer 8和更低版本不支持它,但对于这些浏览器,它映射到
onpropertychange

另见:


对于性能方面,您描述的每个事件都会在不同的时间触发,因此性能不应成为问题,除非。

change
仅在字段失去焦点时才会触发(对于大多数输入)。如果您想要更实时一点的内容,请使用HTML5
oninput
事件。这几乎可以捕获输入元素的任何类型的值更改(它也会冒泡!)。虽然Internet Explorer 8和更低版本不支持它,但对于这些浏览器,它映射到
onpropertychange

另见:


对于性能方面的问题,您描述的每个事件在不同的时间触发,因此性能不应成为问题,除非执行此操作时出现问题:

$(this).bind('change keyup focus click keydown', function(e) { // ...
您必须输入事件处理程序,以确定实际触发了哪个事件

switch(e.type) {
    case 'change': {
        break;
    }
    case 'focus': {
        break;
    }
    // ...
}

如果对您来说足够的话,我会绑定一个
change
事件。在处理所有这些事件时,您会遇到很多麻烦,因为
单击
更改
之前触发,
单击
之后触发,
焦点
等等。这会影响您正确理解和操作。

执行此操作的问题:

$(this).bind('change keyup focus click keydown', function(e) { // ...
您必须输入事件处理程序,以确定实际触发了哪个事件

switch(e.type) {
    case 'change': {
        break;
    }
    case 'focus': {
        break;
    }
    // ...
}

如果对您来说足够的话,我会绑定一个
change
事件。在对所有这些事件执行操作时,您会遇到很多麻烦,因为
单击
更改
之前触发,
单击
之后触发,
聚焦
,等等。这会损害您的理解和正确操作。

嗯,某些事件在值更改时不会引发。例如,当文本字段中的值更改时,
焦点
单击
不会引发,如果单击文本字段,则不会更改值。当然,当值更改时,某些事件不会引发。例如,当文本字段中的值更改时,
焦点
单击
不会升高,如果您单击文本字段,则不会更改值。但它不起作用。。这是因为我有xhtml doctype吗?好的,我在你发布的链接中使用了
input
而不是
oninput
,它可以工作:但是你必须将它与
bind('change keyup')之类的更改一起使用,否则复选框和选项将无法工作work@Alexandra:
输入
事件应使用
元素触发,你用哪个浏览器测试过它?我不建议输入检测使用
keyup
事件,请坚持
change
单击
.chrome。input只在文本元素上触发,但这没关系,因为通过input&change,您可以替换焦点、单击、键控等。。(我在上面的评论中是指
bind('change input')
),但它不起作用。。是因为我有xhtml doctype吗?好的,我使用了
input
而不是
oninput
之类的