javascript - 如何创建一个事件监听器来检测 bool 变量是否变为真?

标签 javascript events event-handling jquery

例如,我有 var menu_ready = false;。我有一个 ajax 函数,它在 ajax 完成后将 menu_ready 设置为 true:

//set up event listener here

$(...).load(..., function() {
    ...
    menu_ready = true;
}

如何设置等待 menu_ready 为真的事件监听器?

最佳答案

您不能将事件监听器附加到 JavaScript 变量本身,但您可以伪造它。使用具有 getsetlisten 方法的对象,而不是 bool 变量:

function Bool(initialValue) {
    var bool = !!initialValue;
    var listeners = [];
    var returnVal = function(value) {
        if (arguments.length) {
            var oldValue = bool;
            bool = !!value;
            listeners.forEach(function (listener, i, list) {
                listener.call(returnVal, { oldValue: oldValue, newValue: bool });
            });
        }
        return bool
    };
    returnVal.addListener = function(fn) {
        if (typeof fn == "function") {
            listeners.push(fn);
        }
        else {
            throw "Not a function!";
        }
    };
    return returnVal;
}

你会像这样使用它:

var menu_ready = Bool(false);
if (menu_ready()) {
    // this code won't get executed, because menu_ready() will currently return false;
}
menu_ready.addListener(function (e) {
    if (e.oldValue != e.newValue) {
        // value changed!
    }
});
menu_ready(true);  // listeners are called.

关于javascript - 如何创建一个事件监听器来检测 bool 变量是否变为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783876/

相关文章:

javascript - 在 AngularJs SPA 中,如何从 URL 中删除 ".html"

javascript - 检测 X 帧选项

c# - Javascript 函数不会从代码隐藏中调用

ios - iPhone 识别按下主页按钮

javascript - 如何防止 jQuery 中触发 "duplicate"事件?

javascript - 使用 @memberOf 时 Eclipse JSDT 停止提供建议

c++ - CEdit 数字验证事件 C++ MFC

java - 有没有什么方法可以找出Android智能手机的显示变化事件?

c# - 如何使用 CellValueChanged 事件检索 DataGridView 单元格的先前值?

c# - 您是否需要 "unwire"ASP.NET webforms 中的事件处理程序