onpropertychange для текстового поля в Firefox?
Как обращаться с onpropertychange
для текстового поля в Firefox, используя JavaScript?
Ниже приведен пример:
var headerBGColorTextBox = document.getElementById('<%= tbHeaderBGColor.ClientID %>');
if (headerBGColorTextBox != null) {
headerBGColorTextBox.pluggedElement = document.getElementById('<%= trHeaderBG.ClientID %>');
headerBGColorTextBox.onpropertychange = function() {
alert('function called');
if (event.propertyName == 'style.backgroundColor' && event.srcElement.pluggedElement != null)
alert(event.propertyName);
event.srcElement.pluggedElement.style.backgroundColor = event.srcElement.style.backgroundColor;
};
}
4 ответа
Есть два способа имитировать событие onpropertychange: события Mutation, как упомянуто выше, которые должны одинаково работать в современных браузерах, и нестандартный метод "object.watch", который обеспечит поддержку старых версий FF < 3.
Смотрите документацию по MDC.
Похоже, что onpropertychange
Событие специфично для IE: http://www.aptana.com/reference/html/api/HTML.event.onpropertychange.html.
Тем не менее, с учетом сказанного, Firefox, по крайней мере 3.0.10 поддерживает событие под названием "DOMAttrModified". Ниже приведен фрагмент того, как это работает:
document.body.addEventListener("DOMAttrModified", function () { console.log ("Args: %o", arguments); }, false);
document.body.id = "Testing";
куда console.log
Предполагается, что Firefox расширение Firebug установлено.
onpropertychange
это нестандартно. См. http://msdn.microsoft.com/en-us/library/ms536956
Следующий код работает:
var foo = '<%= tbHeaderBGColor.ClientID %>';
function changetext()
{
alert('function called');
if (event.propertyName == 'style.backgroundColor' && event.srcElement.pluggedElement != null)
alert(event.propertyName);
event.srcElement.pluggedElement.style.backgroundColor = event.srcElement.style.backgroundColor;
}
if (!!document.addEventListener)
{
document.getElementById(foo).addEventListener("DOMAttrModified", changetext, false);
}
else
{
document.getElementById(foo).addBehavior("foo.htc");
document.getElementById(foo).attachEvent("onpropertychange", changetext);
}