2012-07-30 120 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

相关问题