如何用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()); });