Surveillance DOM Changements dans JQuery
Est-il un moyen de détecter le moment où les personnes handicapées de l'attribut d'une entrée change dans JQuery. Je veux basculer le style basé sur la valeur.
Je peux copier/coller le même activer/désactiver le code pour chaque événement de changement (comme je l'ai fait ci-dessous) mais j'ai été la recherche d'une approche plus générique.
Puis-je créer un événement personnalisé qui permettra de surveiller les personnes handicapées de l'attribut d'entrées spécifiées?
Exemple:
<style type="text/css">.disabled{ background-color:#dcdcdc; }</style>
<fieldset>
<legend>Option 1</legend>
<input type="radio" name="Group1" id="Radio1" value="Yes" />Yes
<input type="radio" name="Group1" id="Radio2" value="No" checked="checked" />No
<div id="Group1Fields" style="margin-left: 20px;">
Percentage 1:
<input type="text" id="Percentage1" disabled="disabled" /><br />
Percentage 2:
<input type="text" id="Percentage2" disabled="disabled" /><br />
</div>
</fieldset>
<fieldset>
<legend>Option 2</legend>
<input type="radio" name="Group2" id="Radio3" value="Yes" checked="checked" />Yes
<input type="radio" name="Group2" id="Radio4" value="No" />No
<div id="Group2Fields" style="margin-left: 20px;">
Percentage 1:
<input type="text" id="Text1" /><br />
Percentage 2:
<input type="text" id="Text2" /><br />
</div>
</fieldset>
<script type="text/javascript">
$(document).ready(function () {
//apply disabled style to all disabled controls
$("input:disabled").addClass("disabled");
$("input[name='Group1']").change(function () {
var disabled = ($(this).val() == "No") ? "disabled" : "";
$("#Group1Fields input").attr("disabled", disabled);
//apply disabled style to all disabled controls
$("input:disabled").addClass("disabled");
//remove disabled style to all enabled controls
$("input:not(:disabled)").removeClass("disabled");
});
$("input[name='Group2']").change(function () {
var disabled = ($(this).val() == "No") ? "disabled" : "";
$("#Group2Fields input").attr("disabled", disabled);
//apply disabled style to all disabled controls
$("input:disabled").addClass("disabled");
//remove disabled style to all enabled controls
$("input:not(:disabled)").removeClass("disabled");
});
});
</script>
Vous devez vous connecter pour publier un commentaire.
Après de plus amples recherches sur ce problème, je suis tombé sur un post de blog par Rick Strahl dans qui nous montre un plug-in jQuery qui permet la surveillance de propriétés CSS: jQuery CSS Propriété de Surveillance Plug-in mis à jour
Bien qu'il existe des moyens plus efficaces de s'attaquer à ce problème, une façon de ce traitement est par l'exécution d'une fonction toutes les xx secondes qui permettra de définir les classes CSS sur désactivé éléments:
Il s'agira de vérifier la saisie de tous les éléments à chaque seconde. Mais encore une fois, c'est une TRÈS mauvaise solution. Vous feriez mieux de la restructuration de votre code.
Sans changer trop de votre code et HTML, je voudrais faire quelque chose comme cela (ne pas le tester tout de même):
Je suppose que vous voulez activer la saisie de textes dans le même fieldset, hein? Donner à ceci un essai:
Vous pouvez profiter de votre mise en page et de faire toutes vos gestionnaires à trouver des choses relativement, le raccourcissement de tout votre code ce:
Vous pouvez voir une démo ici, également puisque vous savez quelle classe, les éléments et que vous le vouliez ou non, vous pouvez utiliser
.toggleClass(classe, bool)
de raccourcir les choses un, mais plus. Si vous voulez que ce soit plus précis, vous pouvez donner à ces boutons radio une classe, par exemple:Ensuite, vous pouvez faire
$(".toggler")
au lieu de$(":radio")
, de même pour lediv
, de lui donner une de la classe et ne.siblings(".fields")
au lieu de.siblings("div")
...le point est que si votre mise en page est conforme, l'utiliser à votre avantage lorsque SEC de codage.