<select>
有这个API。怎么样<input>
?
14 回答
正如@pimvdb 在他的评论中所说,
请注意,仅当输入元素失去焦点时才会触发更改。每当文本框更新而不需要失去焦点时,也会触发输入事件。与键事件不同,它也适用于粘贴/拖动文本。
(请参阅文档。)
这非常有用,值得将其放入答案中。目前(v1.8 *?)在jquery中没有.input()方便fn,所以这样做的方法是
$('input.myTextInput').on('input',function(e){
alert('Changed!')
});
我建议使用如下的 keyup 事件:
$('elementName').keyup(function() {
alert("Key up detected");
});
有几种方法可以达到相同的结果,所以我想这取决于偏好,并且取决于您希望它如何准确地工作。
更新:这仅适用于手动输入而不是复制和粘贴。
对于复制和粘贴,我建议以下内容:
$('elementName').on('input',function(e){
// Code here
});
这是我使用的代码:
$("#tbSearch").on('change keyup paste', function () {
ApplyFilter();
});
function ApplyFilter() {
var searchString = $("#tbSearch").val();
// ... etc...
}
<input type="text" id="tbSearch" name="tbSearch" />
jqGrid
这非常有效,尤其是与控件配对时。您只需在文本框中输入并立即在您的jqGrid
.
只有一种可靠的方法可以做到这一点,它是在一个间隔中提取值并将其与缓存值进行比较。
这是唯一方法的原因是因为有多种方法可以使用各种输入(键盘、鼠标、粘贴、浏览器历史记录、语音输入等)更改输入字段,并且您永远无法使用交叉中的标准事件检测所有这些- 浏览器环境。
幸运的是,由于 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
。
<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
关键字来访问整个元素,这样你就可以使用这个元素做你需要的一切。
即使是动态/Ajax 调用,以下内容也将起作用。
脚本:
jQuery('body').on('keyup','input.addressCls',function(){
console.log('working');
});
html,
<input class="addressCls" type="text" name="address" value="" required/>
我希望这个工作代码能帮助那些试图动态访问/Ajax 调用的人......
如果要在键入时触发事件,请使用以下命令:
$('input[name=myInput]').on('keyup', function() { ... });
如果要在离开输入字段时触发事件,请使用以下命令:
$('input[name=myInput]').on('change', function() { ... });
$("input").keyup(function () {
alert("Changed!");
});
$("input").change(function () {
alert("Changed!");
});
您可以简单地使用 id
$("#your_id").on("change",function() {
alert(this.value);
});
你可以用不同的方式做到这一点,keyup就是其中之一。但我在下面给出改变的例子。
$('input[name="vat_id"]').on('change', function() {
if($(this).val().length == 0) {
alert('Input field is empty');
}
});
注意:input[name="vat_id"]替换为您的输入ID或name。
这对我有用。如果单击名称为fieldA的字段或输入任何键,则会更新 ID为 fieldB的字段。
jQuery("input[name='fieldA']").on("input", function() {
jQuery('#fieldB').val(jQuery(this).val());
});
你可以使用.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.");
});
我完全同意安迪的观点;一切都取决于您希望它如何工作。