inputtypes的onchange事件=“number”

如何处理<input type="number" id="n" value="5" step=".5" /> ? 我不能做keyupkeydown ,因为用户可能只是使用箭头来改变值。 我想要处理它,每当它改变,而不仅仅是模糊,我认为.change()事件。 有任何想法吗?

使用鼠标和键盘

 $(":input").bind('keyup mouseup', function () { alert("changed"); }); 

http://jsfiddle.net/XezmB/2/

oninput事件( .bind('input', fn) )包含从击键到箭头点击和键盘/鼠标粘贴的任何改变,但是IE <9中不支持。

http://jsfiddle.net/XezmB/8/

 $(":input").bind('keyup change click', function (e) { if (! $(this).data("previousValue") || $(this).data("previousValue") != $(this).val() ) { console.log("changed"); $(this).data("previousValue", $(this).val()); } }); $(":input").each(function () { $(this).data("previousValue", $(this).val()); });​ 

这是一个有点贫民窟,但这样你可以使用“点击”事件来捕获当您使用鼠标通过input上的小箭头递增/递减运行的事件。 您可以看到我是如何在一个小小的手动“更改检查”例程中构build的,以确保您的逻辑不会触发,除非值实际发生了更改(以防止在简单的点击操作中出现误报)。

 $(':input').bind('click keyup', function(){ // do stuff }); 

演示: http : //jsfiddle.net/X8cV3/

要检测何时按下鼠标或键,您还可以编写:

 $(document).on('keyup mouseup', '#your-id', function() { console.log('changed'); }); 

可能有更好的解决办法,但这是想到的:

 var value = $("#yourInput").val(); $("#yourInput").on('keyup change click', function () { if(this.value !== value) { value = this.value; //Do stuff } }); 

这是一个工作的例子 。

它只是将事件处理程序绑定到keyupchangeclick事件。 它检查值是否已经改变,如果是,则存储当前值,以便下一次再次检查。 检查是需要处理click事件。

 $("input[type='number']").bind("focus", function() { var value = $(this).val(); $(this).bind("blur", function() { if(value != $(this).val()) { alert("Value changed"); } $(this).unbind("blur"); }); }); 

要么

 $("input[type='number']").bind("input", function() { alert("Value changed"); }); 
 <input type="number" id="n" value="0" step=".5" /> <input type="hidden" id="v" value = "0"/> <script> $("#n").bind('keyup mouseup', function () { var current = $("#n").val(); var prevData = $("#v").val(); if(current > prevData || current < prevData){ $("#v").val(current); var newv = $("#v").val(); alert(newv); } }); </script> 

http://jsfiddle.net/patrickrobles53/s10wLjL3/

我已经使用了一个隐藏的inputtypes作为下一次更改比较所需的以前值的容器。

因为$(“input [type ='number']”)在IE上不起作用,我们应该使用一个类名或者id,例如$('。input_quantity')

并且不要使用.bind()方法。 .on()方法是将事件处理程序附加到文档的首选方法。

所以,我的版本是:

HTML

 <input type="number" value="5" step=".5" min="1" max="999" id="txt_quantity" name="txt_quantity" class="input_quantity"> 

jQuery的

 <script> $(document).ready(function(){ $('.input_quantity').on('change keyup', function() { console.log('nice'); }); }); </script> 

我有同样的问题,我解决了使用这个代码

HTML

 <span id="current"></span><br> <input type="number" id="n" value="5" step=".5" /> 

您可以只添加3个第一行,其他部分是可选的。

 $('#n').on('change paste', function () { $("#current").html($(this).val()) }); // here when click on spinner to change value, call trigger change $(".input-group-btn-vertical").click(function () { $("#n").trigger("change"); }); // you can use this to block characters non numeric $("#n").keydown(function (e) { // Allow: backspace, delete, tab, escape, enter and . if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 || (e.keyCode === 65 && e.ctrlKey === true) || (e.keyCode >= 35 && e.keyCode <= 40)) { return; } if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { e.preventDefault(); } }); 

示例: http : //jsfiddle.net/XezmB/1303/