HTML:监听输入的所有更改,而不仅仅是键盘驱动的更改
HTML: listen for *all* changes to an input, not just keyboard-driven changes?
例如,如果我有如下输入:
<input id="myInput" type="text" />
当值以编程方式更改时(例如,作为$("#myInput").val("new value")
的结果)如何通知我?
示例:http://jsfiddle.net/2ax9y/
Edit:请注意,问题是问如何侦听更改,而不是"如何手动调度更改"。我很清楚我可以手动调度更改事件,但我尽量避免这种情况。
您可以更改$
原型,以便在val(value)
被调用时始终触发change()
事件:
$.prototype.changeval = $.prototype.val;
$.prototype.val = function(v) {
if (v) {
$(this).changeval(v);
$(this).change();
} else {
return $(this).changeval();
}
}
触发更改:http://jsfiddle.net/maniator/2ax9y/1/
有一点不同:http://jsfiddle.net/maniator/2ax9y/2/
您不能可靠地订阅输入元素上的每个更改,但是您可以检查自上次检查以来是否有更改,并在所需的时间粒度内完成。
创建一个检查器函数并循环使用所需的时间粒度- 100ms是一个很好的开始,根据您的需要进行调整。
假设未测试的实现:
var last_value = null;
function handle_changed() {
// Do something here
}
function check_value() {
var v = $("#myelement").val();
if(v !== last_value) {
last_value = v;
handle_changed();
}
}
setInterval(check_value, 100);
我不认为这是变更事件的固有能力。当您以编程方式更改值时,您可以手动触发更改事件。
$("#myInput").val(+(new Date())).change();
相关文章:
- Ajax聊天消息重复而不仅仅是更新
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- 事件为所有项目而不仅仅是当前项目激发
- 在加载时显示,而不仅仅是在选中时显示
- 删除 HttpCookie 不仅仅是它的值
- 脚本选择所有输入,而不仅仅是复选框
- for 循环中的 if 语句都执行,而不仅仅是一个
- 当将函数传递给方法时,为什么使用匿名函数容器而不仅仅是原始函数有效
- .slideup()删除整个ul,而不仅仅是嵌套的li
- jQuery隐藏所有trs或td,而不仅仅是一个
- 使用Maven压缩所有内容,而不仅仅是源目录
- 从数组中删除双值,而不仅仅是javascript中的重复值
- 在全球范围内强制ng严格di,而不仅仅是在ng应用程序级别上
- Jquery Slider-获取滑块的每个数值?不仅仅是在mouseout上
- 我如何让jQuery在Facebook发布自动加载时做一些事情,而不仅仅是在页面加载时
- 如何使元素的宽度和高度为页面(文档)的100%,而不仅仅是窗口(浏览器)
- 在 Magnific 弹出窗口中打开所有图像,而不仅仅是发布图像
- 有没有办法使非html5支持浏览器支持html5,而不仅仅是html5标记,html5 api也是如此
- HTML:监听输入的所有更改,而不仅仅是键盘驱动的更改
- 如何使键盘事件从整个文档触发,而不仅仅是一个按钮