【问题标题】:How can I attach a change event handler to a variable? [duplicate]如何将更改事件处理程序附加到变量? [复制]
【发布时间】:2012-07-28 14:22:38
【问题描述】:

可能重复:
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 将事件处理程序附加到此变量?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    如果是全局变量,可以在支持的环境中使用属性访问器...

    window._conditional_flag = 0;
    Object.defineProperty(window, "ConditionalFlag", {
        get: function() { return window._conditional_flag},
        set: function(v) { console.log("changed"); window._conditional_flag = v; }
    });
    

    【讨论】:

    • 我假设这仅适用于现代网络浏览器(因此不适用于 IE)。
    • @Rocket:仅适用于 IE9+。旧版 Firefox 具有 __setter____getter__ 属性。我相信 FF4+ 支持标准访问器。
    • 这真的很酷!我之前没有在 JavaScript 中使用过 getset :-)
    • @Rocket:它们很酷,但在我之前的测试中,它们也很慢。我假设/希望它们最终会得到优化。
    【解决方案2】:

    变量更改时不会触发“事件”。 JavaScript 不能那样工作。

    这个变量什么时候改变?只需在函数完成后添加对函数的调用即可。

    【讨论】:

    • 由于多个部分落入到位而发生了变化。我想我可以在一个函数中设置要更改的部分,如果所有部分都设置好了,然后调用下一个函数 - 有点像锁中的钥匙排列中的牙齿。
    • @TravisJ:这听起来是个好主意。就个人而言,我觉得如果你在“观察”一个变量,那么你做的事情就不对了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多