2009-05-28 3 views
3

Comment gérer le onpropertychange pour une zone de texte dans Firefox en utilisant JavaScript?onpropertychange pour une zone de texte dans Firefox?

est un exemple ci-dessous:

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

Répondre

4

Il semble que l'événement onpropertychange est spécifique à IE: http://www.aptana.com/reference/html/api/HTML.event.onpropertychange.html.

Cependant, avec cela dit, Firefox, au moins 3.0.10 prend en charge un événement appelé "DOMAttrModified". Ce qui suit est un extrait de la façon dont cela fonctionne:

document.body.addEventListener("DOMAttrModified", function() { console.log ("Args: %o", arguments); }, false); 
document.body.id = "Testing"; 

console.log est l'hypothèse où l'extension Firefox Firebug est installé.

+0

DOMAttrModified est également soutenu par IE9 et Opera (7+). Ne fonctionne toujours pas dans webkit à partir d'août 2011. – ThatGuy

+0

@nix: Toujours pas de nouvelles pour WebKit? Savez-vous ce qu'ils prévoient de soutenir ce genre de cas d'utilisation? – Eldros

+0

@Eldros: aucune idée :) – ThatGuy

5

Il y a deux façons de mimer l'événement onPropertyChange, les événements Mutation mentionnés ci-dessus qui devraient fonctionner de manière égale entre les navigateurs modernes et la « object.watch » méthode non standard qui fournira un soutien pour les anciennes versions de FF < 3.

Voir la documentation sur MDC.

Object.watch

Mutation events

+1

OBJECT.watch ne suivra pas les changements d'éléments DOM. Vous devez utiliser l'événement de mutation DOMAttrModified dans les navigateurs compatibles W3C. OBJECT.watch est pour les changements de propriété de suivi sur l'objet que vous avez créé en Javascript seulement. – ThatGuy

1

Le code suivant fonctionne:

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

Questions connexes