各位大大好
小弟是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事件
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額外加一個變數...