亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當某個函數運行時刪除一個 EventListener

當某個函數運行時刪除一個 EventListener

MMTTMM 2021-09-30 10:06:21
我有以下代碼:function setEvents() {  // do some code  myValidation();}function myValidation() { // do some checks // if checks passed, then set the values to URL parameters window.location.replace(window.location.href + "?myName=" + capture_name);}setEvents();$( "#edit-submitted-name-consolidation" ).click(function() {   window.addEventListener("beforeunload", function(e){     (e || window.event).returnValue = setEvents();              }, false);});解釋:我上面的代碼setEvent()調用了myValidation()從內部調用函數的函數。另外,我有一個代碼,beforeunload可以在用戶關閉瀏覽器時運行相同的功能。這僅在單擊某個輸入時發生。但是,我希望myValidation()不要運行此beforeunload.所以換句話說,我希望瀏覽器總是運行beforeunload,但是當myValidation()被調用/使用時,beforeunload應該被刪除。所以為了實現這一點,這就是我嘗試過的:function setEvents() {  // do some code  myValidation();}function myValidation() { // do some checks // if checks passed, then set the values to URL parameters window.removeEventListener("beforeunload",(e)); window.location.replace(window.location.href + "?myName=" + capture_name);}setEvents();$( "#edit-submitted-name-consolidation" ).click(function() {   window.addEventListener("beforeunload", function(e){     (e || window.event).returnValue = setEvents();              }, false);});所以,我添加window.removeEventListener("beforeunload",(e));了myValidation(). 但是,這對我不起作用。所以我可以問,beforeunload如果myValidation()正在使用,我如何刪除?
查看完整描述

1 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

問題是你應該將處理程序提取到一個變量中,因為這是兩個獨立的函數,你必須有一個對原始函數的引用,你不能像這樣刪除監聽器。


您現在正在做的是刪除不存在的事件偵聽器。


const handler = function(e){

  (e || window.event).returnValue = setEvents();           

}


window.addEventListener("beforeunload", handler, false);

window.removeEventListener("beforeunload", handler);

進一步解釋:試試這個=>


const x = () => {}

const y = () => {}


console.log(x === y) // should be true right? wrong. functions are compared by reference.

console.log(x === x) // this is true, since the reference is the same


查看完整回答
反對 回復 2021-09-30
  • 1 回答
  • 0 關注
  • 272 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號