Javascript: Проверьте, изменился ли элемент
Я хочу знать, если это возможно, как проверить в javascript, если элемент изменился или его атрибут?
Я имею в виду что-то вроде window.onhashchange
для элемента что-то вроде:
document.getElementById("element").onElementChange = function();
Я знаю onchange
- Это что-то вроде этого, но будет ли это работать, если я хочу знать таким образом:
var element = {};
element.attribute = result;
element.attribute.onchange = function();
4 ответов
насколько я понимаю, вы хотите onChange на свойствах объекта javascript. Ответ-нет, насколько мне известно, его не существует.
но вы можете сделать функцию сеттера такой (как доказательство концепции):
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!');
теперь вы получаете окно оповещения с " что-то изменилось с неопределенного на Hello World!'. И (element.something === 'Hello World!')
вернутся true
.
если вы сейчас называете:
element.setProperty('something', 'Goodbye world!');
вы получаете окно оповещения с " что-то изменилось от Hello World! к Прощай, Мир!'.
конечно, вы должны установить свойство только через setProperty
метод в коде, если вы хотите запечатлеть это событие!
Edit:
в какой-то момент в будущем вы можете использовать
Я думаю, вам понадобится способ захватить событие, которое вызвало изменение атрибута, а не изменение атрибута. Изменение атрибута может быть вызвано только вашим CSS или javascript, оба являются проявлениями действий пользователя.
Я считаю, что нет такого события. Однако можно использовать setInterval или setTimeout для отслеживания изменений элементов и использовать его для соответствующей реакции.
Я сделал это. Это работает довольно хорошо. Я бы использовал метод 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);
}
}
}