iT邦幫忙

0

關於javascript的window.removeEventListener

各位大大好
小弟是js菜鳥
最近在練習使用hashchange事件
遇到一個問題
由於原本的內容有點複雜 所以簡化了
這是大概的程式碼:

var hash = function(value){
    return function(){
      alert(value);
    } 
}
function a_click(value){
    window.addEventListener('hashchange',hash(value),false);
}
function b_click(){
     window.removeEventListener('hashchange',hash,false);
     loaction.hash="";
}
function test(){
    loction.hash ="/HelloWorld";
}

事件順序大概是這樣 a_click()->test()->b_click()
想詢問為何在按下b後 他似乎沒有把hashchange事件清除
而在下行loaction.hash="";時一樣會跑hash事件

qpoome iT邦新手 5 級 ‧ 2017-01-25 11:15:24 檢舉
感謝各位大大 剛剛以使用window.onhashchange 解決了
qpoome iT邦新手 5 級 ‧ 2017-01-25 11:16:48 檢舉
但還是對於這個有點疑惑 如果大大們能協助我了解 也請大大們多多指導
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
fillano
iT邦超人 1 級 ‧ 2017-01-25 11:54:07
最佳解答

removeEventListener要使用「同樣參考」的函數物件來把eventListener移除。如果你要正確使用:

var hash = function(value){
    return function(){
      alert(value);
    } 
};
var f;
function a_click(value){
    f = hash(value);
    window.addEventListener('hashchange', f, false);
}
function b_click(){
     window.removeEventListener('hashchange', f, false);
     loaction.hash="";
}
function test(){
    loction.hash ="/HelloWorld";
}

雖然我不喜歡在global額外加一個變數...

qpoome iT邦新手 5 級 ‧ 2017-01-25 11:59:04 檢舉

了解拉~~感謝大大!!!哈哈,小弟也不喜歡在global加變數

我要發表回答

立即登入回答