我正在为一个 js-heavy Web 应用程序实现一个交互式教程。我突出显示了一些容器,并希望用户单击其中的某个元素。同时,我想阻止用户做任何其他事情,例如点击不同的链接。
主要问题是我不想取消绑定任何事件 - 当教程关闭时,应用程序必须像以前一样工作。
我开始在所有容器的后代元素上注册一个处理程序:
element.on("click.tutorialLock", function(e){
e.stopPropagation();
e.stopImmediatePropagation();
e.preventDefault();
}
然后我设置它的“优先级”,以便它在任何其他事件之前执行:
handlers = element.data("events").click;
our = handlers.pop();
handlers.splice(0, 0, our);
最后,当我想解锁某个元素时,我只是禁用它上面的事件:
elementToEnable.off(".tutorialLock")
这行得通,但很重。我尝试仅在定义了一些自定义事件处理程序的元素上注册事件,但它忽略了锚点和其他基本元素。也许你能想出一些好主意?