我正在使用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
提前致谢。
答案 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;
}
});
答案 1 :(得分:0)
这是 Updated Demo
$("#textbox").on('input focus focusout', function() {
console.log('I am pretty sure the text box changed');
});
keyup
和paste
。change
事件,但在触发之前会有一段时间滞后。<强> Input event Browser support 强>
答案 2 :(得分:0)
我想你可能真的在问
“我如何知道某个字段是否已更改”,部分已在此处解答: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
});