我正在開發(fā)一個(gè)通用應(yīng)用程序,讓用戶輸入公式并保存,yadda yadda。我想確保在未保存更改時(shí)警告用戶,通過應(yīng)用內(nèi)路由和 beforeunload 事件觸發(fā)的提示。兩者都應(yīng)該在發(fā)生更改時(shí)處于活動(dòng)狀態(tài),但如果沒有任何更改/表單為空,則恢復(fù)為非活動(dòng)狀態(tài)。第一個(gè)完美無缺。第二個(gè),“beforeunload”事件也被讀取和刪除,但前提是觸發(fā)更改為“isEmpty / isDifferent”狀態(tài)的輸入元素首先未獲得焦點(diǎn)。這很煩人,因?yàn)楫?dāng)用戶開始輸入時(shí)它不會(huì)提供即時(shí)反饋,因?yàn)榧词乖撟侄尾粸榭?,用戶也可以通過刷新使頁(yè)面不被警告,因?yàn)樗麤]有使輸入失去焦點(diǎn)。以下是相關(guān)代碼:handleBeforeUnload (e) { console.log('leaving') e.preventDefault() }, leaving (preventDefault) { if (preventDefault) { window.addEventListener('beforeunload', this.handleBeforeUnload) console.log('should be added') } else { window.removeEventListener('beforeunload', this.handleBeforeUnload) console.log('should be removed') } } }, components: { 'form-input': Input, modal: Modal }, watch: { isEmpty () { this.leaving(!this.isEmpty) } },現(xiàn)在我只配置了組件來處理新文檔,這就是為什么我現(xiàn)在只使用“isEmpty”作為狀態(tài)。在“handleBeforeUnload”方法之前,該鏈按預(yù)期工作,該方法只能在用戶在輸入未聚焦后刷新或類似情況下觸發(fā)。我推測(cè)這種行為可能是 Vue 的生命周期鉤子的結(jié)果,特別是“beforeDestroy”,但我不確定。是什么導(dǎo)致了這種行為?提前致謝。
在元素未聚焦之前未添加或刪除 BeforeUnload 偵聽器
慕尼黑8549860
2022-06-16 15:04:02