【问题标题】:jQuery Listen For All Text Input ChangesjQuery 侦听所有文本输入更改
【发布时间】:2025-11-25 15:00:02
【问题描述】:

我在表单中有一个输入元素,我希望能够在值更改时提取其值。看看这个 Fiddle:http://jsfiddle.net/spryno724/WaBzW/1/.

通过使用change 事件,我可以在输入失去焦点时显示来自文本输入的值。但是,当表单被重置或 JavaScript 清除文本输入的值时,该值不会更新。

当文本输入控件发生任何更改时,我是否可以监听特定事件?

我想避免使用变通方法,例如监听表单何时重置,或何时按下清除按钮。这是我的应用程序所做的简化示例,如果我尝试执行所有这些操作,它会很快变得疯狂。

感谢您的宝贵时间。

【问题讨论】:

  • 我今天也在处理同样的问题。 jQuery .on 事件应该可以处理这个问题,但我无法让它工作。 $("#ElementID").on("input change propertychange paste keyup", handler)...
  • 嗯...我以前从未使用过.on()。我会调查的
  • 我以前使用过.live(),但从 1.7 版起已弃用,.on() 现在是首选方法
  • @AlfalfaStrange 查看我在 .live() 事件中对 Johnny 的评论

标签: javascript jquery html forms events


【解决方案1】:
$(document).ready(function() {
    $('input.clear').click(function() {
        $('input.input').val('');
        $('p.display').text('The value of the text input is: ');
    });

    $('input.input').on('keyup change', function() {
       $('p.display').text('The value of the text input is: ' + $(this).val());
    });
})​

DEMO 1

这个解决方案可能会对您有所帮助:

$(document).ready(function() {
    $('input.clear, input[type=reset]').on('click', function() {
        $('input.input').val('').change();
        $('p.display').text('The value of the text input is: ');
    });

    $('input.input').on('keyup change', function() {
        $('p.display').text('The value of the text input is: ' + $(this).val());
    });
});​

DEMO 2

【讨论】:

  • 谢谢,但点击重置不会更新输入上方的文本。
  • 当数据被设置为另一个函数的输入值时呢? .keyup 不会涵盖这个
  • 感谢您的意见,但我也提到过,我希望“避免使用变通方法,例如在表单重置或按下清除按钮时监听。这是一个我的应用程序所做的简化示例,如果我尝试执行所有这些操作,它会很快变得疯狂。”
  • 我明白了。它确实有效。但是,重置表单不会更新输入上方的文本。
  • @spryno724 重置不起作用,但 clear 可以.. 重置应该做什么?
【解决方案2】:

这个问题与另一个问题完全相同。将投票数最高的答案视为我的问题的答案:

JS Events: hooking on value change event on text inputs

【讨论】:

  • 您应该(投票)将问题作为重复项关闭,而不是发布答案。
【解决方案3】:

覆盖jQuery的val方法

HTML

<input id='myInput' name='myInputField' value='v1'>

JS

var myInput = $('#myInput');

//this will not trigger the change event
myInput.val('v2');

//override val method
var oldVal = myInput.val;
myInput.val = function(value){
   var returnVal = oldVal.call(this,value);
   myInput.change();
   return returnVal;
}

// this will trigger the change event
// myInput.val is overridden
myInput.val('v3');

注意这仅在从myInput 变量调用 val 方法时才有效

【讨论】:

    【解决方案4】:

    试试

    $('#input').live('change',function() {         })
    

    【讨论】:

    • .live() 是每当有新元素被动态添加到页面并且必须附加事件时:api.jquery.com/live
    • 请勿使用.live(),从 1.7 版起已弃用
    • 我知道你所说的关于它被弃用的说法是正确的。奇怪的是,我有一种情况,我想在输入值更改时更改输入的背景颜色,并且使用 .live('change'... 工作,而使用 .on('change'... 不起作用 - 使用jquery 1.7.3. 知道为什么吗?
    • 是的,我也遇到了同样的问题,我想我只是不擅长 jQuery
    • @JohnnyMnemonic 您需要将选择器上下文传递给on,否则它将就像您使用.change() .on( events [, selector] [, data], handler(eventObject) ) 一样工作