如何避免文本字段上的多个事件侦听器?

时间:2014-06-13 04:21:42

标签: javascript jquery backbone.js

我正在使用Backbone Marionette进行申请。我需要在每个文本字段中观察和更新模型。

所以,我使用了以下概念:

$("#textbox").on('keyup  paste focus focusout', function() {
    console.log('I am pretty sure the text box changed');
});

但问题是,当一个人将一些值粘贴到文本框时,我将获得控制台3次或更多次。 - 如何暂停3控制台? (这都是触发同一时间键,焦点,过去)

使用单个文本框的侦听器数量再次是一个好习惯吗?我想知道这种方法是否正确?

是否有任何听众用文本框处理任何事情?

或者有什么好的做法吗?

使用输入也会产生这类问题..

jQuery Input Event does not Fire if Input is Empty

提前致谢。

Here is the Live Demo

4 个答案:

答案 0 :(得分:3)

您可以使用一个文本框收听任意数量的事件。

$("#textbox").on('keyup  paste focus focusout', function(e) {
    switch(e.type) {
        case  "keyup":
            console.log('keyup');        
        break;

        case  "paste":
            console.log('paste');        
        break;

        case  "focus":
            console.log('focus');        
        break;

        case  "focusout":
            console.log('focusout');        
        break;    
    }

});

DEMO

答案 1 :(得分:0)

这是 Updated Demo

$("#textbox").on('input focus focusout', function() {
    console.log('I am pretty sure the text box changed');
});
  • 您可以使用常见的 input 事件代替keyuppaste
  • 您还可以实施change事件,但在触发之前会有一段时间滞后。

<强> Input event Browser support

答案 2 :(得分:0)

你是asking the right question吗?

我想你可能真的在问

“我如何知道某个字段是否已更改”,部分已在此处解答:Get default value of an input using jQuery

第二部分(粘贴部分)可以通过添加@shaunakde回答的input事件处理程序来处理,或者如果有问题,在焦点上运行setInterval,在focusout上运行clearInterval

答案 3 :(得分:0)

对于#textbox元素上更改的任何属性,而不仅仅是value属性。

   jQuery('#textbox').on('input propertychange paste', function() {
        // do your stuff
    });