2009-10-12 7 views
4

Existe-t-il un moyen d'appeler une fonction javascript si une variable javascript modifie des valeurs à l'aide de jQuery?onchange variable javascript

Quelque chose à l'étendue de -

var test = 1; 
test = 2; // calls a javascript function 
test = 3; // calls a javascript function 

De cette façon, je ne voudrais pas ajouter un événement onchange à tant de fonctions différentes.

Répondre

1

Non, il n'y a pas d'interrogation avec setInterval ou setTimeout ou des rappels. Les événements ne s'appliquent qu'aux DOM. Je suggère que vous essayez d'aller avec callbacks et faire des choses comme ceci:

function foo(data, callback) 
{ 
    // do things with data 
    callback(data); 
} 

function bar(data) 
{ 
    console.log('callback can has', data); 
} 

foo('baz', bar); 

Il est un exemple grossier, mais devrait vous donner l'idée.

13

(Quelque chose semble un peu mal planifié dans votre code si vous avez besoin de fonctionnalités comme ça)

La meilleure façon d'ajouter cette fonctionnalité est de créer une fonction de mise à jour votre variable, qui appelle également toute autre fonction tu veux.

Au lieu de:

var test = 1; 
test = 2; // calls a javascript function 
test = 3; // calls a javascript function 

Vous faites:

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

+1 Après avoir lu les autres, c'est clairement la meilleure réponse. – Evildonald

+1

+1 pour "Quelque chose semble un peu négligé dans votre code si vous avez besoin de fonctionnalités comme ça". Plutôt vrai. –

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

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

Ce exactement ne répond pas à votre question, mais il peut résoudre votre problème: rendre votre variable contenu HTML d'un élément, puis utilisez l'événement changement jQuery()

<script> 
document.write("<div id='test'>"+test+"</div>"; 
$("#test").change(function(){//your script here}); 
</script> 
3

essayer , il est vrai événement de changement de variable:

var book = { 
    _year: 2004, 
    edition: 1 
}; 
Object.defineProperty(book, "year", { 
    get: function(){ 
     return this._year; 
    }, 
    set: function(newValue){ 
     this._year=newValue; 
     this.edition=newValue-2004; 
     alert(this._year); 
     alert(this.edition); 
    } 
}); 

book.year=2017 

J'utilise cette méthode a écrit une vue du modèle bi-directionnel de liaison jquery plug-in jQueryMV https://github.com/gonnavis/jQueryMV.

Questions connexes