2012-07-30 140 views
9

可能重複:
Listening for variable changes in JavaScript or jQuery如何將變更事件處理程序附加到變量?

如何跟蹤如果這個變量發生了變化?

var ConditionalFlag = 0; 

我嘗試這樣做:

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

,但無濟於事。我曾考慮使用一個25毫秒的計時器來檢查這樣的變化:

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

但是,這似乎是矯枉過正。有沒有辦法使用jQuery或JavaScript將事件處理程序附加到此變量?

回答

5

當變量發生變化時,沒有「事件」被觸發。 JavaScript不能這樣工作。

這個變量什麼時候變化?只需在一個函數後添加一個調用即可。

+1

它得到改變多件下降到位的結果。我想我可以在一個函數裏面設置一些函數,如果所有的部分都被設置了,那麼這個函數會調用下一個函數 - 有點像鎖中的鑰匙陣容。 – 2012-07-30 21:13:15

+1

@TravisJ:這聽起來像個好主意。就我個人而言,我覺得如果你正在「觀察」一個變量,那麼你做的不是很正確。 – 2012-07-30 21:14:09

9

如果它是一個全局變量,你可以使用屬性訪問器中支持的環境......

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

我會認爲這隻適用於現代網絡瀏覽器(所以不是IE)。 – 2012-07-30 21:17:33

+0

@火箭:僅適用於IE9 +。較早的Firefox具有'__setter__'和'__getter__'屬性。我相信FF4 +支持標準訪問器。 – 2012-07-30 21:18:53

+0

這真的很酷!我之前並沒有在JavaScript中使用'get'和'set'搞亂:-) – 2012-07-30 21:19:44

相關問題