我的目标是观察输入值并在其值发生变化时触发处理程序以编程方式。我只需要它为现代浏览器。对编程式更改为输入值的触发操作
我曾尝试使用defineProperty
多种选择,这是我最新的迭代:
var myInput=document.getElementById("myInput");
Object.defineProperty(myInput,"value",{
get:function(){
return this.getAttribute("value");
},
set:function(val){
console.log("set");
// handle value change here
this.setAttribute("value",val);
}
});
myInput.value="new value"; // should trigger console.log and handler
这似乎做什么我期望,但感觉像一个黑客,因为我重写现有值属性,并使用打value
(属性和属性)的双重状态。它也打破似乎不喜欢修改后的属性的change
事件。
我的其他尝试:
- 一个的setTimeout/setInterval的循环,但这不是干净要么
- 各种
watch
和observe
polyfills,但他们打破了所有的输入值属性
什么将是一个适当的方式来实现相同的结果?
现场演示:http://jsfiddle.net/L7Emx/4/
[编辑]澄清:我的代码正在观看的输入元件,其中的其它应用可以推更新(如AJAX调用,例如,或其它领域的变化的结果的结果)。我无法控制其他应用程序如何推送更新,我只是一个观察者。
[编辑2]为了澄清我所说的“现代浏览器”的意思是,我会很高兴与在IE 11和Chrome 30
[更新]基于更新演示有效的解决方案接受的答案:http://jsfiddle.net/L7Emx/10/
@ mohit-jain建议的技巧是为用户交互添加第二个输入。
是它永远是你做的改变或者是你看别人改变呢? – stevemarvell
@stevemarvell我的代码正在观察其他应用程序可以推送更新的输入元素(例如,由于ajax调用,或者由于其他字段的更改)。 – Christophe
我认为你最好的解决方案是实现一个超时监视它 – stevemarvell