2009-05-28 12 views
3

JavaScriptでテキストボックスのonpropertychangeを処理するにはどうすればよいですか?以下Firefoxのテキストボックスのonpropertychange?

例である:

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イベントがIE Specific:http://www.aptana.com/reference/html/api/HTML.event.onpropertychange.htmlのように見えます。

しかし、これは、少なくともFirefox 3.0.10では「DOMAttrModified」というイベントをサポートしています。以下は、それがどのように動作するかの抜粋です:

console.logはFirefoxの拡張機能 Firebugがインストールされていると想定されて
document.body.addEventListener("DOMAttrModified", function() { console.log ("Args: %o", arguments); }, false); 
document.body.id = "Testing"; 

+0

DOMAttrModifiedもIE9、オペラ(7+)によって支持されています。まだWebkitでは2011年8月現在では動作しません。 – ThatGuy

+0

@nix:WebKitのニュースはまだありませんか?この種のユースケースをサポートする予定があるのか​​分かりますか? – Eldros

+0

@Eldros:no idea :) – ThatGuy

5

onpropertychangeイベントを模倣する2つの方法があります。前述のMutationイベントは最新のブラウザでも同じように動作するはずです。また、古いバージョンのFF <をサポートする "object.watch"非標準メソッド3

MDCのドキュメントを参照してください。

Object.watch

Mutation events

+1

OBJECT.watchはDOM要素の変更を追跡しません。 W3C準拠のブラウザでDOMAttrModified突然変異イベントを使用する必要があります。 OBJECT.watchは、Javascriptで作成したオブジェクトのtrackignプロパティの変更用です。 – ThatGuy

1

次のコードは動作します

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); 
    } 

DOM Mutation Events