如何使用jQuery实现<input type =“text”/>的onchange?

时间:2009-09-18 08:45:57

标签: jquery input onchange

<select>有此API。那么<input>呢?

13 个答案:

答案 0 :(得分:231)

正如@pimvdb在评论中所说,

  

请注意,只有在输入元素失去焦点时才会触发更改。   每当文本框更新时,还会触发输入事件   没有它需要失去焦点。与关键事件不同,它也适用于   粘贴/拖动文本。

(见documentation。)

这非常有用,值得一提。目前(v1.8 *?)在jquery中没有.input()方便fn,所以这样做的方法是

$('input.myTextInput').on('input',function(e){
 alert('Changed!')
});

答案 1 :(得分:201)

您可以使用.change()

$('input[name=myInput]').change(function() { ... });

但是,此事件只会在选择器失去焦点时触发,因此您需要单击其他位置才能使其工作。

如果这不适合您,您可以使用jQuery eventskeyupkeydown之类的其他keypress - 取决于您想要的确切效果。

答案 2 :(得分:74)

我建议使用类似下面的keyup事件:

$('elementName').keyup(function() {
 alert("Key up detected");
});

有几种方法可以达到相同的结果,所以我认为这取决于您的偏好,取决于您希望它如何正常工作。

更新:这仅适用于手动输入而非复制和粘贴。

对于复制和粘贴,我建议如下:

$('elementName').on('input',function(e){
 // Code here
});

答案 3 :(得分:27)

这是我使用的代码:

$("#tbSearch").on('change keyup paste', function () {
    ApplyFilter();
});

function ApplyFilter() {
    var searchString = $("#tbSearch").val();
    //  ... etc...
}

<input type="text" id="tbSearch" name="tbSearch" />

这非常有效,特别是在与jqGrid控件配对时。您只需键入文本框,然后立即查看jqGrid中的结果。

答案 4 :(得分:22)

只有一种可靠的方法,它是通过拉取一个区间中的值并将其与缓存值进行比较来实现的。

这是唯一的方法是因为有多种方法可以使用各种输入(键盘,鼠标,粘贴,浏览器历史记录,语音输入等)更改输入字段,并且您永远无法使用标准事件检测所有输入字段在跨浏览器环境中。

幸运的是,多亏了jQuery中的事件基础结构,添加自己的inputchange事件非常容易。我这样做了:

$.event.special.inputchange = {
    setup: function() {
        var self = this, val;
        $.data(this, 'timer', window.setInterval(function() {
            val = self.value;
            if ( $.data( self, 'cache') != val ) {
                $.data( self, 'cache', val );
                $( self ).trigger( 'inputchange' );
            }
        }, 20));
    },
    teardown: function() {
        window.clearInterval( $.data(this, 'timer') );
    },
    add: function() {
        $.data(this, 'cache', this.value);
    }
};

使用它:$('input').on('inputchange', function() { console.log(this.value) });

此处有一个演示:http://jsfiddle.net/LGAWY/

如果您害怕多个时间间隔,可以在focus / blur上绑定/取消绑定此事件。

答案 5 :(得分:5)

<input id="item123" class="firstName" type="text" value="Hello there" data-someattr="CoolExample" />

$(".firstName").on('change keyup paste', function () {
   var element = $(this);
   console.log(element);
   var dataAttribute = $(element).attr("data-someattr");
   console.log("someattr: " + dataAttribute );
});

我建议使用this关键字来访问整个元素,以便您可以使用此元素完成所需的一切。

答案 6 :(得分:3)

$("input").keyup(function () {
    alert("Changed!");
});

答案 7 :(得分:3)

即使是动态/ Ajax调用,以下内容也能正常工作。

脚本:

jQuery('body').on('keyup','input.addressCls',function(){
  console.log('working');
});

HTML,

<input class="addressCls" type="text" name="address" value="" required/>

我希望这个工作代码可以帮助那些试图动态访问/ Ajax调用的人......

答案 8 :(得分:2)

您可以使用ID

$("#your_id").on("change",function() {
    alert(this.value);
});

答案 9 :(得分:1)

$("input").change(function () {
    alert("Changed!");
});

答案 10 :(得分:1)

您可以使用.keypress()

例如,考虑HTML:

<form>
  <fieldset>
    <input id="target" type="text" value="Hello there" />
  </fieldset>
</form>
<div id="other">
  Trigger the handler
</div>

事件处理程序可以绑定到输入字段:

$("#target").keypress(function() {
  alert("Handler for .keypress() called.");
});

我完全赞同安迪;一切都取决于你希望它如何工作。

答案 11 :(得分:1)

这对我有用。如果点击了名称为 fieldA 的字段或输入了任何密钥,则会更新ID为 fieldB 的字段。

jQuery("input[name='fieldA']").on("input", function() {
    jQuery('#fieldB').val(jQuery(this).val());
});

答案 12 :(得分:1)

您可以通过不同的方式执行此操作, keyup 是其中之一。但是我在下面给出改变的例子。

$('input[name="vat_id"]').on('change', function() {
    if($(this).val().length == 0) {
        alert('Input field is empty');
    }
});

NB:输入[name =“ vat_id”] 替换为您输入的 ID 名称