jQuery文本框更改事件在文本框失去焦点之前不会触发?

时间:2013-06-26 10:21:54

标签: jquery events textbox

我发现文本框上的jQuery更改事件在我单击文本框之外时才会触发。

HTML:

<input type="text" id="textbox" />

JS:

$("#textbox").change(function() {alert("Change detected!");});

请参阅demo on JSFiddle

我的应用程序要求在文本框中的每个字符更改时触发事件。我甚至尝试过使用keyup ......

$("#textbox").keyup(function() {alert("Keyup detected!");});

...但是已知的事实是,右键单击并粘贴时不会触发keyup事件。

任何解决方法?是否有两个听众都会引起任何问题?

7 个答案:

答案 0 :(得分:285)

绑定到这两个事件是执行此操作的典型方法。您还可以绑定到粘贴事件。

您可以绑定到以下多个事件:

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

如果你想对它迂腐,你还应该绑定到mouseup以满足拖动文本的需要,并添加一个lastValue变量以确保文本实际上发生了变化:

var lastValue = '';
$("#textbox").on('change keyup paste mouseup', function() {
    if ($(this).val() != lastValue) {
        lastValue = $(this).val();
        console.log('The text box really changed this time');
    }
});

如果你想成为super duper迂腐,那么你应该使用间隔计时器来满足自动填充,插件等的需要:

var lastValue = '';
setInterval(function() {
    if ($("#textbox").val() != lastValue) {
        lastValue = $("#textbox").val();
        console.log('I am definitely sure the text box realy realy changed this time');
    }
}, 500);

答案 1 :(得分:80)

在现代浏览器中,您可以使用the input event

DEMO

$("#textbox").on('input',function() {alert("Change detected!");});

答案 2 :(得分:4)

if you write anything in your textbox, the event gets fired.
code as follows :

HTML:

<input type="text" id="textbox" />

JS:

<script type="text/javascript">
  $(function () {
      $("#textbox").bind('input', function() {
      alert("letter entered");
      });
   });
</script>

答案 3 :(得分:3)

$(this).bind('input propertychange', function() {
        //your code here
    });

这适用于键入,粘贴,右键单击鼠标粘贴等。

答案 4 :(得分:2)

试试这个:

$("#textbox").bind('paste',function() {alert("Change detected!");});

请参阅demo on JSFiddle

答案 5 :(得分:0)

请尝试以下代码:

$("#textbox").on('change keypress paste', function() {
  console.log("Handler for .keypress() called.");
});

答案 6 :(得分:0)

阅读你的评论让我陷入了肮脏的修复。我知道,这不是一种正确的方法,但可以解决这个问题。

alist