Javascript:检查元素是否已更改

时间:2010-11-27 16:30:21

标签: javascript element onchange

我想知道,如果有可能,如果元素已更改或其属性,如何检入javascript?

我的意思是像window.onhashchange这样的元素:

document.getElementById("element").onElementChange = function();

据我所知onchange是这样的,但是如果我想以这种方式知道它会起作用:

var element = {};
element.attribute = result;

element.attribute.onchange = function();

5 个答案:

答案 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);

发件人: Mozilla page on Mutation Observers