元素上单击事件的重复绑定-取消绑定
Repeated binding unbinding of click event on element
我有点困惑,我想知道在同一个元素上绑定和取消绑定事件更好,或者我应该使用一个标志(类似于"inProgress")。
我有一个场景,如果一个操作已经在进行中,我必须阻止操作或事件发生,例如
我有一个锚标记,我已经将一个事件绑定到该锚标记,该事件处理一些ajax功能,如获取数据和更新页面的某些部分,我想要的是停止重复点击锚标记,这样,一旦第一次点击锚标记就可以等待,直到服务器发出响应,页面的某个部分被更新,我的困惑在于,我是应该在点击发生后解除事件绑定,在处理响应后再次绑定同一个处理程序,还是应该设置一个标志来检查是否有处理程序正在进行中,并在处理响应时将标志设置为false?哪种方式在性能方面更有效?
非常感谢任何帮助/建议!
感谢
使用标志!
最好使用一些布尔变量并检查是否允许执行该操作,而不是调用bind和unbind(这是额外的开销)。
如果使用jQuery,则可以使用data()将数据存储在该锚点上。
类似:
$('.testLink').on('click',function(){
//reference link
var link = $(this);
//check data
data = link.data('amIallowed');
//if no data existed yet
if(!data){
//set data and make it false to prevent further requests
link.data('amIallowed',{
allowRequest : false
});
//lets do ajax
doAjax();
}
else{ //if there was data
//and we were allowed
if(data.allowRequest){
doAjax(link);
}
}
});
//do ajax stuff here
function doAjax(link){
$.post('url',{param:val},function(){
//revert to true after request
link.data('amIallowed',{
allowRequest : true
});
});
}
如果你不使用jQuery,你仍然可以使用简单的JS来完成同样的任务。jQuery使用"expando-properties"将数据绑定到元素上。如果可以使用expando-props,请改用变量。
相关文章:
- 如何销毁/删除/取消绑定SnapSVG.js
- 取消绑定主干视图事件
- 从父元素取消绑定滚动事件并绑定到子元素
- 使用Re-base时,在React中从状态绑定和取消绑定Firebase
- javascript onchange取消绑定错误|未定义
- 在javascript中取消绑定侦听器
- 在偶数侦听器块中绑定和取消绑定
- 取消绑定angular中的scope属性
- 根据文件类型取消绑定和重新绑定click事件处理程序
- 取消计算列的自定义绑定
- 取消绑定而不是重新绑定
- 取消绑定/绑定单击jquery selectbox插件
- 取消绑定后未提交的表单
- 动态取消绑定eventListeners(垃圾收集)
- 取消绑定父节点和子节点
- 取消绑定由加载jQuery'的外部脚本添加的事件;s的getScript函数
- 正在取消绑定jQuery事件处理程序
- setTimeout vs. 事件绑定/取消绑定;什么更有效
- 真正阻止元素绑定-取消绑定元素-AngularJS
- 元素上单击事件的重复绑定-取消绑定