我想知道,如果有可能,如果元素已更改或其属性,如何检入javascript?
我的意思是像window.onhashchange
这样的元素:
document.getElementById("element").onElementChange = function();
据我所知onchange
是这样的,但是如果我想以这种方式知道它会起作用:
var element = {};
element.attribute = result;
element.attribute.onchange = function();
答案 0 :(得分:8)
据我了解你想要onChange javascript对象属性。答案是否定的,据我所知,它并不存在。
但是你可以制作这样的setter函数(作为概念证明):
var element = {};
element.setProperty = function(property, value) {
if (typeof(element.onChange) === 'function') {
element.onChange(property, element[property], value);
}
element[property] = value;
};
element.onChange = function(property, oldValue, newValue) {
alert(property + ' changed from ' + oldValue + ' to ' + newValue);
};
element.setProperty('something', 'Hello world!');
现在你得到一个警告框,里面有'从undefined更改为Hello World!'。 (element.something === 'Hello World!')
将返回true
。
如果你现在打电话:
element.setProperty('something', 'Goodbye world!');
你会收到一个警告框,其中包含'来自Hello World的更改内容!再见世界!'。
当然,如果您想捕获此事件,则必须通过所有代码中的setProperty
方法设置属性!
修改强>
在将来的某个时间,您可以使用Object.observe()。
编辑2:
现在还有proxies。
答案 1 :(得分:1)
我猜你需要一种方法来捕获触发属性更改而不是属性更改的事件。属性的更改可能只是由于您的CSS或您的javascript,这两者都是用户操作的表现形式。
答案 2 :(得分:1)
我相信没有这样的事件。但是,您可以使用setInterval或setTimeout来监视元素更改并使用它来做出相应的反应。
答案 3 :(得分:0)
我这样做了。它工作得很好。如果我知道的话,我会使用setProperty方法。
function searchArray(searchValue, theArray, ChangeValue){
for (var i=0; i < theArray.length; i++) {
if (theArray[i].id === searchValue) {
theArray[i].changed = ChangeValue;
}
}
}
function getArrayIindex(elementid, theArray){
for (var i=0; i < theArray.length; i++) {
if (theArray[i].id === elementid) {
return i;
}
}
}
function setInputEvents(hiddenObject) {
var element;
for (var i = 0; i < document.forms[0].length; i++) {
element = document.forms[0].elements[i];
//Check to see if the element is of type input
if (element.type in { text: 1, password: 1, textarea: 1 }) {
arrFieldList.push({
id: element.id,
changed:false,
index: i,
});
element.onfocus = function () {
if (!arrFieldList[getArrayIindex(this.id, arrFieldList)].changed) {
hiddenObject.value = this.value;
this.value = '';
}
}
element.onblur = function () {
if (this.value == '') {
this.value = hiddenObject.value;
}
}
element.onchange = function () {
searchArray(this.id, arrFieldList, true);
}
}
}
答案 4 :(得分:0)
您可以考虑一个突变观察者。
为此,您首先创建一个回调(当dom元素更改时触发)
将其分配给观察者var observer = new MutationObserver(callback);
然后告诉观察者observer.observe('<div></div>', observerOptions);