狀況:Click event 是直接寫入 <a>,所以使用 unbind 並無法解除這個事件,如果需要在這個函數內重新給定參數並且再次呼叫該怎麼做?

//javascript
function abc(x, y){
  alert(x + ', ' + y);
}

//html
test

首先要使用 removeAttr 來清除 onclick event:

$(selector).removeAttr('onclick');

再來,利用 bind 可傳入 data object 的特性解決傳遞參數,並使用匿名函數來呼叫:

$(selector).bind('click', {x: 'New X', y: 'New Y'}, function(e){
  abc(e.data.x, e.data.y);
});

最後,發揮 jQuery 的特長寫成一列:

$(selector).removeAttr('onclick').bind('click', {x: 'New X', y: 'New Y'}, function(e){ abc(e.data.x, e.data.y); });

搞定收工!

延伸閱讀: