Y a-t-il un moyen d'appeler une fonction JavaScript si une variable JavaScript change des valeurs à l'aide de jQuery?
quelque chose à l'étendue de - p> de cette façon je ne voudrais pas Il faut ajouter un événement Onchanange à tant de fonctions différentes. P> p>
8 Réponses :
Non, il n'y a pas, il suffit de voter avec C'est un exemple rugueux, mais devrait vous donner l'idée. P> P> seinterval code> ou
Settimeout code> ou rappelons. Les événements s'appliquent uniquement à dom. Je suggérerais que vous essayiez d'aller avec des rappels et de faire des choses comme ceci:
(quelque chose semble un peu planifié de votre code si vous avez besoin de fonctionnalités comme celle-ci) em> Le moyen le plus simple d'ajouter cette fonctionnalité consiste à créer une fonction permettant de mettre à jour votre variable, qui appelle également Quelle que soit autre fonction que vous souhaitez. p> au lieu de: p> vous faites: p> var test = 1;
function set_test(newval) {
test = newval;
my_callback(); // this is whatever you wanted to call onChange
}
set_test(2);
set_test(3);
+1 Après avoir lu les autres, c'est clairement la meilleure réponse.
+1 pour "Quelque chose semble un peu précisément planifié dans votre code si vous avez besoin de fonctionnalités comme celle-ci". Plutôt vrai.
The below function will poll for changes in the test variable every 5 seconds: // initialize test variable globally var test = 1; // global variable to store the previous value of test // which is updated every 5 seconds var tmp = test; setInterval("pollForVariableChange()", 5000); function pollForVariableChange() { if (tmp != test) { alert('Value of test has changed to ' + test); } tmp = test; }
Une option consiste à envelopper vos données dans un objet plus lourd.
var Watching = function(){ var a; this.getA(){ return a; }; this.setA(value){ a = value; this.trigger('watch'); }; his.watchA(callback){ this.bind('watch', callback); }; }; var obj = new Watching(); obj.watchA(function(){ alert('changed'); }); obj.setA(2);
Cela ne répond pas à votre question exactement, mais cela peut résoudre votre problème: Faites votre variable en tant que contenu HTML d'un élément, puis utilisez l'événement JQuery Change ()
<script> document.write("<div id='test'>"+test+"</div>"; $("#test").change(function(){//your script here}); </script>
Essayez ceci, c'est un événement de changement de variable réel:
Vous pouvez créer une classe à notifier lorsque votre variable a changé.
C'est la classe: alors vous pouvez créer une instance de cette classe au lieu de votre variable: p> et quand vous voulez Changez votre variable, utilisez simplement ce code: P> myVar.value = 20; // calls the changeHandler function
myVar.value = 20; // does't call the changeHandler function
myVar.value = 40; // calls the changeHandler function
Vous pouvez faire quelque chose comme celui-ci avec réglage des intervalles pour garder une trace du changement: