有没有jQuery的实时替代方法可以实现.change事件?

8

我希望在输入字段更改后立即发生某些事情,而不是在取消选择此输入后发生。有任何替代方法吗?

这里有演示

更新 它还应该适用于用户不必实际单击键盘上的按钮的类型(如HTML5输入类型=数字/日期)


可能重复:https://dev59.com/ClHTa4cB1Zd3GeqPSIb3 - Patrick Evans
阅读你的答案让我感觉好像没有100%可行的替代方案。 - feri baco
5个回答

13

实际事件随控件类型而变化。我提供了一些示例:

$(document).ready(function() {
    function callback() { alert($(this).val()); }
    $('input[type=number]').on('input',callback);
    $('input[type=date]').on('input',callback);
    $('input[type=text]').on('keyup',callback);
});

注意:如果您使用CTRL+V粘贴文本,则keyup事件可能会触发两次

注意2:右键单击->粘贴将不被识别。paste事件也无法帮助您,因为它在文本更新之前触发。


1
为什么我不能在文本字段中使用on('input')?这似乎是正确的答案。 - feri baco
至少你可以在“粘贴”上设置一个超时 - 这很不美观,但可能会起作用。 - RichieHindle

2
键盘松开事件发生在释放键盘按键时。
  $(document).ready(function() {
     $('#i1').on('keyup',function() {
              alert('Changed');
    });

.keyup()


请注意,keyup 不会捕获所有情况,例如右键单击/粘贴。 - RichieHindle

1

如果是文本框,则需要使用 .keyup

由于你想要的是html5字段,请尝试使用 .click

应该适用于number字段,但不确定date字段是否适用。


0

好的,谢谢。但是我希望它适用于输入类型为数字的情况,例如。 - feri baco

-1

像这样的吗?

 $(document).ready(function() {
        $('#i1').on('keyup',function() {
                  alert('Change has been recognised!');
        });
        $('#i1').on('paste',function() {
                  alert('Change has been recognised!');
        });
});

演示


“not after this input has been unfocused.” ... 然而,“模糊事件会在元素失去焦点时发送。” - Grant Thomas
好的,已经更正了答案 @GrantThomas - Alessandro Minoccheri
“paste” 在文本更新之前触发(val() 仍显示旧文本) - Alex
使用毫秒级的超时,例如: $('#i1').on('paste',function() { setTimeout( alert('更改已被识别! '+$(this).val()),50); }); - Ravinder Payal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接