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

<select>有这个API,那么<input>呢?

你可以使用.change()

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

但是,这个事件只会在select器失去焦点时触发,所以你需要点击其他地方来完成这个工作。

如果这对你不太合适,你可以使用一些其他的jQuery事件,如keyup , keydown或keypress – 这取决于你想要的确切效果。

正如@pimvdb在评论中所言,

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

(见文档 )

这是非常有用的,值得把它放在一个答案。 目前(v1.8 *?)在jQuery中没有.input()方便的fn,所以这样做的方法是

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

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

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

有几种方法可以达到同样的效果,所以我想这是取决于你希望它如何工作。

更新:这只适用于手动input不复制和粘贴。

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

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

只有一个可靠的方法可以做到这一点 ,它是通过在一个区间内拉取值并将其与caching值进行比较。

之所以这是唯一的方法,是因为有多种方法可以使用各种input(键盘,鼠标,粘贴,浏览器历史logging,声音input等)来更改input字段,并且您不能使用十字中的标准事件来检测所有input字段浏览器环境。

幸运的是,感谢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

这是我使用的代码:

 $("#tbSearch").on('change keyup paste', function () { ApplyFilter(); }); function ApplyFilter() { var searchString = $("#tbSearch").val(); // ... etc... } <input type="text" id="tbSearch" name="tbSearch" /> 

这工作相当不错,特别是当与jqGrid控件配对。 您只需键入一个文本框,并立即查看您的jqGrid的结果。

 <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 ); }); 

我build议使用this关键字来访问整个元素,这样你就可以用这个元素来做你需要的一切。

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

以下将工作,即使是dynamic/阿贾克斯调用,

脚本,

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

HTML,

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

希望这个工作代码将帮助谁试图dynamic访问/阿贾克斯电话..

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

可以使用.keypress()

例如,考虑HTML:

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

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

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

完全同意安迪,一切都取决于你希望如何工作。

你可以简单地使用ID

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

这对我有效。 如果单击名称为fieldA的字段,或者input了其中的任何一个字符,都会更新ID字段为B的字段。

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