2012-07-30 13 views
9

Powiel możliwe:
Listening for variable changes in JavaScript or jQueryJak dołączyć procedurę obsługi zdarzenia zmiany do zmiennej?

Jak mogę śledzić jeśli zmienna ta uległa zmianie?

var ConditionalFlag = 0; 

Próbowałem to:

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

Ale bezskutecznie. Rozważałem użycie zegara 25ms, aby sprawdzić zmiany w następujący sposób:

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

Jednak wydaje się to przesadą. Czy istnieje sposób dołączenia obsługi zdarzenia do tej zmiennej za pomocą jQuery lub javascript?

Odpowiedz

5

Nie ma "zdarzenia", które zostanie wywołane, gdy zmienna ulegnie zmianie. JavaScript nie działa w ten sposób.

Kiedy zmienia się ta zmienna? Po prostu dodaj połączenie do funkcji po tym.

+1

Robi się zmieniło w wyniku wielu elementów wchodzących na miejsce. Przypuszczam, że mogłem po prostu ustawić części, które mają zostać zmienione w funkcji, która następnie wywołuje następną funkcję, jeśli wszystkie elementy są ustawione - rodzaj jak zęby w składzie klucza w zamku. –

+1

@TravisJ: To brzmi jak lepszy pomysł. Osobiście uważam, że jeśli "obserwujesz" zmienną, nie robisz czegoś całkiem dobrze. –

9

Jeśli jest to zmienna globalna, można użyć udostępniające właściwości w obsługiwanych środowiskach ...

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

Założę się, że to działa tylko na nowoczesnych przeglądarkach internetowych (więc nie IE). –

+0

@Rocket: Działa tylko w IE9 +. Starszy Firefox ma właściwości '__setter__' i' __getter__'. Wierzę, że FF4 + obsługuje standardowe akcesoria. –

+0

To jest naprawdę fajne! Nie zawiedli mnie 'get' i' set' w JavaScript przed :-) –

Powiązane problemy