2010-10-03 8 views
0

Il semble que les événements propertychange soient ignorés lorsqu'un champ est dans l'état désactivé. Existe-t-il un moyen d'exécuter du code lorsque la valeur change?Détecter les modifications sur le champ désactivé

<input id="country" onpropertychange="alert(country.value)" disabled="disabled"/> 
<input type="button" onclick="country.value='USA'" value="Go" /> 

Répondre

0

Pourriez-vous pas seulement ajouter à votre événement dans l'attribut onclick du bouton après country.value='USA'? Par exemple:

<input id="country" disabled="disabled" /> 
<input type="button" onclick="country.value='USA'; alert(country.value)" value="Go" /> 
+0

Normalement oui, mais dans mon cas non. Le gestionnaire de clic est un code tiers que je ne peux pas toucher. Je peux ajouter un second clic, mais il n'y a aucune garantie que l'on sera appelé en premier. Y a-t-il un événement qui se déclenche après le clic? 'Cliqué' peut-être? –

0

Oui il y a! En résumé, vous devrez déclencher vous-même l'événement propertychange lorsque la valeur est désactivée, et pour ce faire, vous devrez modifier les getters et les setters sur les éléments que vous souhaitez activer/désactiver.

Voici quelques bons articles sur cette technique:

Malheureusement, vous ne pouvez pas utiliser le fireEvent natif sur un événement désactivé dans le setter, parce qu'il obéit à l'état handicapé. Nous avons donc besoin d'un système de déclenchement d'événement externe. Heureusement pour nous, les bonnes personnes de jQuery l'ont déjà fait! Donc, avec cette connaissance, j'ai écrit un plugin jQuery fireOnDisable. Pour l'utiliser, il suffit d'appliquer à la sélection, par exemple:

$('#disabled_thing').fireOnDisable(); 

Si vous êtes dans un navigateur qui ne supporte pas nativement les événements PropertyChange, ce plugin ne fera rien. C'est exclusivement pour IE8-10. Pour les navigateurs autres que IE (et IE-11), utilisez MutationObservers. Pour IE7 ou moins, vous êtes vissé, car ils n'exposent pas les fonctions setter/getter.

Questions connexes