使用.on()
方法可以删除使用.off()
添加的jQuery中的事件处理程序。每个事件最多执行一次.one()
怎么样?是否可以使用.off()
方法安全删除(对于角落案例)?
更新:
特别想知道是否会有任何副作用,例如如果显式删除自删除事件处理程序,则会发生内存泄漏。
function loadObject(e){
if $(e.currentTarget).hasClass('condition'){
//Corner case - execute the unload function & remove the handler
unloadObject();
removeCloseHandler();
}else {
//Do more stuff
addCloseHandler();
}
}
function removeCloseHandler(){
$('body').off('click', unloadObject);
}
function addCloseHandler(myObj){
$('body').one('click', myObj, unloadObject);
}
function addOpenHandler(){
$('#myid').on('click', '.myclass', loadObject);
}
P.S。我知道我可以使用.on()
& .off()
而不是.one()
但是我很好奇.off()
与.one()
的使用
答案 0 :(得分:3)
特别想知道是否会有任何副作用,例如如果显式删除自删除事件处理程序,则内存泄漏
不,不会有。
这是处理此问题的.on方法的重要部分:
if (one === 1) { // if it was called from `$.fn.one`
origFn = fn;
fn = function (event) {
// Can use an empty set, since event contains the info
jQuery().off(event);
return origFn.apply(this, arguments);
};
// Use same guid so caller can remove using origFn
fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
}
.on
绑定事件和.one
绑定事件之间的唯一区别是.one
获得一个特殊的回调,当被调用时解除绑定事件然后执行原始回调。