Javascript 每次值更改时运行一个方法
我想知道你们中是否有人能帮我解决我认为的问题 我有一个元素(更具体地说是svg),每当某个地方的值发生更改时,我都要更新它 我有一个变量:Javascript 每次值更改时运行一个方法,javascript,events,observer-pattern,thunderbird,Javascript,Events,Observer Pattern,Thunderbird,我想知道你们中是否有人能帮我解决我认为的问题 我有一个元素(更具体地说是svg),每当某个地方的值发生更改时,我都要更新它 我有一个变量: GetThreadTree().treeBoxObject.getFirstVisibleRow()初始值为0。每次GetThreadTree().treeBoxObject.getFirstVisibleRow()的值更改时,我都要运行函数updateCanvas() 我得到的是: canvas.observe(GetThreadTree().treeBo
GetThreadTree().treeBoxObject.getFirstVisibleRow()
初始值为0。每次GetThreadTree().treeBoxObject.getFirstVisibleRow()的值更改时,我都要运行函数updateCanvas()
我得到的是:
canvas.observe(GetThreadTree().treeBoxObject.getFirstVisibleRow(), "scroll", updateCanvas());
但是当它第一次被调用时,它只调用一次updateCanvas()
,并且由于某种原因,它不会执行后面的代码。我检查了错误控制台,但什么都没有
有什么想法吗?你的逻辑全错了。当您更新您的值时,需要由函数在一个位置执行的操作,如treeBoxObject.IncrementRow()或类似操作
然后,您可以让该函数触发一个事件,如OnTereboxRowIncremented。这个事件就是你所关注的,当它发生变化时,你可以进行检查并更新任何你喜欢的内容
请原谅这些奇怪的函数名只是试图使用您现有的函数名。解决此问题的一种方法是:
var registeredRow = 0;
function checkRow(){
var row = GetThreadTree().treeBoxObject.getFirstVisibleRow();
if (registeredRow != row) {
registeredRow = row;
updateCanvas();
}
window.setTimeout(checkRow, 1);
}
在调用checkRow之前:
registeredRow = GetThreadTree().treeBoxObject.getFirstVisibleRow();
checkRow();
但这不是最优雅的解决方案,但它确实有效;) 这有帮助吗:还有,平台是什么?浏览器Javascript版本?它没有帮助,效果仍然和我的问题一样。它是为Thunderbird 3.0b4pre设计的,所以我想JavaScript版本是最新的版本之一。