jQuery .off()方法中的函数处理程序
Function handler in jQuery .off() method
谁能解释一下,为什么脚本会这样:当我在#wrapper click handler中声明函数fn时,.off()方法不会从#cover中删除处理程序。
$('#wrapper').on('click', 'button', function (){
function fn(){
alert('on')
}
if($(this).is('#add')){
$('#info').text('event added')
$('#cover').on('click', fn)
}
if($(this).is('#remove')){
$('#info').text('event removed');
$('#cover').off('click', fn);
}
})
但是当它在(全局作用域)之外时,它工作得很好。
function fn(){
alert('on')
}
$('#wrapper').on('click', 'button', function (){
if($(this).is('#add')){
$('#info').text('event added')
$('#cover').on('click', fn)
}
if($(this).is('#remove')){
$('#info').text('event removed');
$('#cover').off('click', fn);
}
})
这是一个范围问题。如果在$('#wrapper')中定义。on('click'), fn
变量将包含对函数的引用,并且每次
因此,off
将尝试通过删除与on
如果在全局作用域中定义fn
,它将在整个执行过程中保持相同的引用
前者的问题是,当你再次点击按钮时,你会重新定义fn
,也就是说,你的on
和off
函数接收到的参数fn
完全不同。
相关文章:
- 如何让 AJAX 函数处理提交表单
- Jquery onmouseover()函数处理动态html图像和span
- 如何在ajax调用完成之前停止函数处理
- 如何跨多个函数处理Promise
- JavaScript 函数中的 JQuery 函数 :: 处理.js.
- 覆盖 jquery .load() 函数 - 处理回调
- 调用 Javascript 函数处理表单后,HTML 表单未打印到浏览器
- 如果选中单选按钮,则调用函数处理程序
- 我们如何在错误的资源请求的情况下使用 XMLHttpRequest 函数处理程序
- Javascript 对象或函数处理程序的新函数
- 函数处理 mootools.floor 不工作
- 如何将函数处理程序从控制器传递到 AngularJs 中的指令隔离范围
- Javascript闭包和前后函数处理程序
- position()被当作函数处理
- 存储/导入变量&函数处理(JS)
- 如何使用Out回调函数处理JQueryAjax结果
- 在事件上填充数组,并在事件函数处理程序外部访问它
- 如何在JavaScript中从嵌套函数处理程序返回
- 用一个函数处理多个事件
- 通过单个javascript函数处理两个表单