JavaScript监视事件不能在DOM元素对象上工作
JavaScript watch event not working on DOM element objects?
我知道我可以使用watch
绑定一个回调,当对象属性改变时将被触发。这确实适用于一般对象,如:
{'a':1, 'b':'7'}
所以,我认为我可以简单地绑定一个回调,当输入字段值改变时触发:
var inputDomElement = document.getElementById('someInputElement');
inputDomElement.watch('value',function (id, oldval, newval) {
alert(oldval);
alert(newval);
});
但这不起作用。根本不会触发。没有警告框。我已经在Firefox 5和Google Chrome(最新版)上试过了。
这不是watch
的工作方式吗?watch对DOM元素不起作用吗?我以为它们只是物体,不是吗?
以下是关于watch的MDN信息:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/watch 更新2:
我不能使用change事件。因为只有当文本元素捕获模糊时才会触发更改。这意味着它只会在用户从这个文本框切换到另一个文本框时触发。它不是动态的,例如,检查用户名或电子邮件地址是否已被占用,我希望在每次不同的更改时发生
DOM是用C/c++编写的,其中获取和设置Javascript变量的概念并不像你或我经常想象的那样存在。您可能认为代码的实现类似于下面的代码。不幸的是,Object.watch
从未启动,因为DOM不是不断更新Javascript值,但Javascript正在请求从DOM更新。
input.onuserchangevalue = function(){
input.value = 'new user input'
}
考虑到DOM通常是如何工作的,每个元素都有几十个潜在的属性。
-
innerHTML
,value
、style.cssText
name
,id
,style.background
,style.backgroundColor
想象一下,如果DOM下划线代码必须不断更新每个DOM元素的Javascript属性(%)内存和CPU周期将通过屋顶必须确保属性匹配的显示值。DOM的内部也必须检查Javascript值是否有潜在的变化。
现实-红色药丸
基本上DOM不给javascript的信息,但javascript请求从DOM的信息。这是对下面发生的事情的一个不错的Javascript解释。
Object.defineProperty(input, "value", {
get : function(){ /* get C/C++ DOM value */ },
set : function(){ /* change C/C++ DOM value */ }
});
这就解释了为什么DOM经常是Javascript的瓶颈。Javascript必须在每次与DOM接口时请求/设置内部DOM值。
您需要使用jQuery对象,而不是DOM对象。
document.getElementById("someID") //returns DOM Object
$('#someId') //returns jQuery Object
注意:你可以像这样做一些奇怪的事情:
$(document.getElementById("someID")) //returns a jQuery Object
这个可以
$('#someInputElement').watch('value',function (id, oldval, newval) {
alert(oldval);
alert(newval);
});
如果您想跟踪文本元素的变化,为什么不直接使用.change()方法呢?
http://jsfiddle.net/rkw79/qTTsH/$('input').change(function(e) {
$('div').html('old value: ' + e.target.defaultValue + '<br/>'
+ 'new value: ' + e.target.value);
})
对于即时更改,使用.keyup(): http://jsfiddle.net/rkw79/qTTsH/1/
- 如何查找流星集合中最后一个元素/对象的id
- 如何在JSXGraph中传递元素对象而不是id
- 手动呈现原型JS元素对象
- 为什么jQuery's每个循环的函数都保存对元素对象的引用
- 通过 html 图像元素对象显示图像
- 在 Plain/Pure Javascript 中,你如何找出元素对象具有哪些可用的方法或属性
- 如何在Angualar的jqLite元素对象中按id查找元素
- XPath 元素/对象在使用 document.evaluate 时未定义
- 如何使用JQuery获取元素对象
- 使用jQuery元素对象作为数组键
- 传递元素对象
- Mootools元素>对象# & lt; HTMLDivElement>没有方法'addEvent'
- 迭代所有节点对象,而不仅仅是元素对象
- 当一个元素被点击时,另一个元素(对象)发送给函数
- 正在分配属性'由getElementById()在语句中返回的HTML元素对象的s
- 创建一个新的用户界面元素对象的Javascript原型
- 在javascript中继承了DOM元素对象!这段代码有什么问题?
- AppendChild不工作!,从DOM元素对象继承.我做错了什么?
- 有没有办法“得到”?就像getElementById()能够获取html元素对象一样,使用函数来获取javascript
- 如何返回javascript DOM元素对象,并从调用者appendChild(obj)它