我能够检测输入是否在键入、粘贴等过程中更改了值,但如果值从另一个脚本动态更改,我无法检测到它:
假设我有一个输入
<input id="testInput" value="Type Here" />
如果这个值通过在上面输入而改变,我想警告“已改变”。
$('#testInput').on('input', function(){
alert("changed");
});
这是可行的,但如果值从另一个脚本动态更改,我就不能触发警报:
$('#testInput').val("Dynamic Value"); //This doesn't show the alert
我希望能够检测到值是否发生了更改,无论是通过键入、粘贴还是通过脚本或操作进行动态更改。
.val()
是在许多不同的地方执行的,所以不能将代码中的.val()
全部更改为.val().trigger("change")
之类的代码。
下面是一个带有更好示例的jsfiddle:
发布于 2018-07-26 05:50:21
只需触发事件即可!
$('#testInput').val("Dynamic Value").trigger("input");
发布于 2018-07-26 06:25:26
考虑到Ele的回答...
在重写.val()
函数时...你可以添加一个事件触发事件,而不是比较id!如果没有提供,则不会对“常规”.val()
函数进行任何更改。如果提供,它将触发事件。
无论如何,您都必须以一种更实际的方式,以编程方式更改值的每个位置。;)
var $val = $.fn.val;
$.fn.val = function(newVal,eventToTrigger) {
if (eventToTrigger != null) this.trigger(eventToTrigger);
$val.call(this, newVal);
}
$('.someClass').on('input', function() {
alert("Programmatically inputted!");
});
$('.otherClass').on('change', function() {
alert("Programmatically changed!");
});
$('.someClass').val('Hello you!','input');
$('.otherClass').val('Doing fine?','change');
$('#whatever').val('Hehehe.');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="someClass">
<input type="text" class="otherClass">
<input type="text" id="whatever">
https://stackoverflow.com/questions/51528095
复制相似问题