2012-07-30 9 views
9

Eventuali duplicati:
Listening for variable changes in JavaScript or jQueryCome posso allegare un gestore di eventi di modifica a una variabile?

Come faccio a monitorare se questa variabile è cambiato?

var ConditionalFlag = 0; 

ho provato questo:

var ConditionalFlag = 0; 
$(ConditionalFlag).change(function() { 
    alert("Changed"); 
}); 
ConditionalFlag++; 

Ma senza alcun risultato. Ho preso in considerazione l'utilizzo di un timer 25ms per verificare la modifica in questo modo:

var ConditionalFlag = 0; 
function CheckFlag() { 
    if (ConditionalFlag > 0) { 
     alert("Changed"); 
     clearInterval(check); 
    } 
} 
var check = window.setInterval("CheckFlag()", 25); 
ConditionalFlag++; 

Tuttavia, sembra eccessivo. C'è un modo per collegare un gestore di eventi a questa variabile con jQuery o javascript?

risposta

5

Non c'è un "evento" che viene attivato quando una variabile cambia. JavaScript non funziona in questo modo.

Quando viene modificata questa variabile? Basta aggiungere una chiamata a una funzione dopo di essa.

+1

vengono cambiate a seguito di molteplici pezzi che cadono in posizione. Suppongo che potrei semplicemente impostare i pezzi da cambiare all'interno di una funzione che poi chiama la funzione successiva se tutti i pezzi sono impostati - un po 'come il modo in cui i denti di un tasto si trovano in una serratura. –

+1

@TravisJ: Sembra un'idea migliore. Personalmente, sento che se stai "guardando" una variabile, non stai facendo qualcosa di giusto. –

9

Se si tratta di una variabile globale, è possibile utilizzare di accesso alle proprietà in ambienti supportati ...

window._conditional_flag = 0; 
Object.defineProperty(window, "ConditionalFlag", { 
    get: function() { return window._conditional_flag}, 
    set: function(v) { console.log("changed"); window._conditional_flag = v; } 
}); 
+2

Suppongo che funzioni solo su browser Web moderni (quindi non su IE). –

+0

@Rocket: funziona solo in IE9 +. Più vecchio Firefox ha le proprietà '__setter__' e' __getter__'. Credo che FF4 + supporti gli accessor standard. –

+0

Questo è davvero fantastico! Non ho incasinato 'get' e' set' in JavaScript prima :-) –

Problemi correlati