有没有办法备份所有给定元素上设置的事件?jQuery - 备份/缓存元素的事件?
Backstory:我有一些代码,当用户将鼠标悬停在某个图标上时,会显示绝对定位的“弹出”类型(请考虑悬停帮助文本)。如果用户将鼠标悬停在弹出框上,则它会停留在周围,但是如果它们从弹出框或图标上滑下,弹出框就会隐藏起来。这一切都按预期工作。然而,弹出窗口中还有一些表单元素(不要问),如果用户开始填写表单,我想删除隐藏弹出窗口的mouseleave事件,以便它们不会意外关闭并丢失他们的数据。抛开糟糕的用户体验,这很容易做到,但是一旦用户提交表单或者单击图标,我想重新添加mouseleave功能。
伪代码:
var event_backup;
var icon = $("img#icon");
var popup = $("div#popup");
icon.bind("mouseenter"):
popup.show();
icon.bind("mouseleave"):
popup.hide();
icon.bind("click"):
popup.hide();
popup.events = event_backup; //how do I do this?
popup.bind("mouseleave"):
popup.hide();
popup.bind(...):
//lots of bind events for popup that I want to keep
//I'd rather not duplicate code and manually re-add these later
popup.children("form input").bind("focus"):
event_backup = popup.events; //how do I do this?
popup.unbind();
popup.children("form input#done_button").bind("click"):
popup.events = event_backup; //how do I do this?
希望这是有道理的,并且道歉,如果这是一个愚蠢的问题...这是一个漫长的一天。
谢谢!休息一段时间后,再次查看我的代码,当用户单击表单时,我返回并添加了各种标志。当他们点击表单时,我会向父级添加一个“聚焦”类,并修改我的mouseleave事件以检查“聚焦”类,如果“聚焦”类不存在,则只隐藏弹出窗口。点击图标或提交表单然后删除“重点”类。 – Ray