2012-03-11 79 views
2

有没有办法检测全局布尔值是否从jQuery变为false?jQuery - 检测布尔值的变化

+0

池是最简单的:http://stackoverflow.com/questions/6783876/how-do-you-make-an-event-listener-that-detects-if-a-boolean-variable-becomes-tru – 2012-03-11 16:39:30

+0

虽然最简单的并不总是最好:) – 2012-03-11 16:43:49

回答

8

是的,使用一个getter/setter对,setter捕获变量的设置:http://jsfiddle.net/M768B/

(function() { 
    var val = false; 

    ​Object.defineProperty(window, "something", { 
     get: function() { 
      return val; 
     }, 
     set: function(v) { 
      val = !!v; // `!!` to force setting a boolean 
      alert("Changed to " + val); 
     }​​ 
    }); 
})(); 
+1

谢谢,它完美的工作! – Philip 2012-03-12 09:30:09

0

的解决方案可能是

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> 
<title>JavaScript Object - watch() method example</title> 
</head> 
<body> 
<h1 style="color: red">JavaScript Object : watch() method</h1> 
<hr /> 
<script type="text/javascript"> 
//This is done to make the following JavaScript code compatible to XHTML. <![CDATA[ o = {x:10} 
o.watch("x", 
function (id,oldvalue,newvalue) { 
document.writeln("o." + id + " changed from " 
+ oldvalue + " to " + newvalue+"<br />") 
return newvalue 
}) 
o.x = 20 
o.x = 30 
o.x = 40 
//]]> 
</script> 
</body> 
</html> 

兼容:

  • 的Internet Explorer 7
  • 火狐3.6
  • 谷歌浏览器7
  • 的Safari 5.0.1
  • 歌剧院10

here

+0

本网站习惯于不只发布一个链接,还包括代码和细节在您的答案,以便它自己站立。如果链接断开,你的答案仍然会对社区有价值,并会独立存在。使用编辑链接继续改进你的答案。 :) – jmort253 2012-03-11 16:45:22

+1

这是真正的意义 – thomas 2012-03-11 16:48:19

+0

有一件事要指出,手表只适用于Mozilla,并根据文档,有一个性能影响。他们推荐它进行调试。 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/watch – jmort253 2012-03-11 16:55:02

0

保留一个函数回调数组作为“观察者”。当任何东西通过你的接口函数改变布尔值(例如setBooleanValue(True);)然后遍历回调数组并调用每个函数来通知观察者。