有沒有辦法備份所有給定元素上設置的事件?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