【问题标题】:how to capture change event in input with jquery?如何使用 jquery 捕获输入中的更改事件?
【发布时间】:2012-04-04 14:42:01
【问题描述】:
$('input').change(function(){
    alert($(this).val());
});
$('input').val(1);

这不起作用。我需要使用 JavaScript 捕获更改输入:-s

谢谢。

【问题讨论】:

  • 您的问题不清楚。您拥有的“更改”处理程序很好,假设您在适当的时间调用它(即,在页面上所有 <input> 元素之后的 <script> 标记中,或在“就绪”或“加载”处理程序)。我将您的问题解释为对.val() 的调用不会触发“更改”处理程序。

标签: javascript jquery onchange


【解决方案1】:

<input> 元素的编程更改不会导致事件。只有用户交互。

你可以这样做:

$('input').val(1).trigger('change');

【讨论】:

  • 他问的是如何捕捉事件,而不是如何抛出它:)
  • @mattytommo 问题是当您以编程方式更改这样的元素的值时,没有创建事件。已经存在的“更改”事件处理程序可以很好地捕获事件。
  • 啊,我明白了,我没有意识到他是想自己搞事情,我的错。为你 +1 :)
【解决方案2】:

您必须将这些函数放在“Ready”函数中。看小提琴:http://jsfiddle.net/SfjJQ/1/

$(function() {
    $('input').change(function() {
        alert($(this).val());
    });
    $('input').val(1);
    $('input').trigger('change');
});​

请记住,您的:

$('input').val(1);

将输入初始化为值为 1。

当然你也可以这样做:

$(function() {
    $('input')
        .change(function() {
            alert($(this).val());
        })
        .val(1)
        .trigger('change');
});​

【讨论】:

  • 调用.val()不会触发任何事件。
  • 我对这个问题的解释是用户先生期望调用.val(1) 来触发“更改”处理程序。我可能是错的;这个问题是稀疏而神秘的。
  • 是的,我明白你的意思,我添加了另一行来在页面加载时触发更改事件。
【解决方案3】:

正如其他人所提到的, .val() 不会触发任何事件;但是,您可以向 jQuery 添加一个包装函数,该函数将更改值并在需要时触发事件:

$( function () {

    //-- new jQuery function
    $.fn.changeVal = function () {
        $.fn.val.apply( this, arguments );
        $( this ).trigger( 'change' );
    };

    //-- your updated code
    $('input').change(function(){
        alert($(this).val());
    });
    $('input').changeVal(1);

} );​

http://jsfiddle.net/bA3V2/

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多