jQuery,如何在文本输入因另一个事件而改变时捕获

时间:2013-08-22 21:15:31

标签: javascript jquery

我有一个文本输入,由于按钮事件而更新。我想检测文本输入中的值何时发生了变化。请参阅以下示例:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<script  type="text/javascript">
$(document).ready(function(){
   $('#text').bind("input change paste", function(){
      console.log("text changed");
      // do something
   });

   $('#click').click (function(){
      $('#text').val('something');
   });
});
</script>

<body>
   <input id='text' type='text'>
   <input id='click' type='button' value='click'>
</body>

稍后,该按钮将触发日历,以便用户选择将更新文本输入的日期/时间。由于日历是图书馆的一部分,我不想改变它。我想检测文本字段何时获得新值。

谢谢!

2 个答案:

答案 0 :(得分:3)

我认为你所指的是

$("#text").on("change", function(){});

看看这个post

答案 1 :(得分:2)

由于您使用的日期/时间选择器库不会引发任何类型的changeinput事件,因此可靠地判断值是否已更改的唯一方法是使用计时器观察并自己提出改变事件。以下是一种方法:

// check for changes every 100 ms
setInterval(function() {
    var lastVal = $('#text').data('last-value');
    if (typeof lastVal === 'undefined') {
        lastVal = $('#text').val();
        $('#text').data('last-value', lastVal);
    }

    if (lastVal !== $('#text').val()) {
        $('#text').change(); // trigger the change event
    }
}, 100);

// setup your change handler 
$('#text').on("input change paste", function() {
    // before doing anything else, set the last-value data property
    $('#text').data('last-value', $('#text').val());

    // do something ...
    console.log('changed!');
});

// now programmitically updating the $('#text') element will result 
// in your change handler being triggered
$('#click').click (function(){
    $('#text').val('something');
});