jquery中的DOM事件绑定与解绑

  在jquery事件中有时候有的事件只需要在绑定后有效触发一次,当通过e.target判断触发条件有效触发后解除绑定事件,来避免多次无效触发和与未知情况造成冲突。

  这时候就要用到了jquery中的事件绑定与事件解绑。

     


1 $(document).on(‘click.endEdit‘,function (e) {
2                         if(!$(e.target).hasClass(‘datagrid-cell‘)&&e.target.tagName!="TD"){  //事件发生后的判断条件
3                             dg.datagrid(‘endEdit‘, opts.editIndex);   //满足判断条件情况下执行的操作
4                             $(document).off(‘.endEdit‘);    //在操作结束后解绑事件
5                         }
6                     })

      其中on.()中的.endEdit是自己来对事件命名。在达到条件后可以通过命名来对需要解绑的事件进行解除绑定的操作。就相当于给每个事件加上了一个ID可以通过

这个ID对事件进行管理。

    我所在的项目需要一个表格控件,可拖拽(改变列的宽度),可编辑(单击表格可实时编辑其中的内容),列头固定,自适应。easyui中的表格控件都满足了要求。但是

表格单机可编辑出现了一个小bug总会有一个表格处于编辑状态。而需求是在点击除表格外的其他部分时需要让表格全部处于不可编辑状态。就用上以上代码。

如图:

扩展代码如下:

 1  $.extend($.fn.datagrid.methods, {
 2         editCell: function(jq,param){
 3             return jq.each(function(){
 4                 var opts = $(this).datagrid(‘options‘);
 5                 var fields = $(this).datagrid(‘getColumnFields‘,true).concat($(this).datagrid(‘getColumnFields‘));
 6                 for(var i=0; i<fields.length; i++){
 7                     var col = $(this).datagrid(‘getColumnOption‘, fields[i]);
 8                     col.editor1 = col.editor;
 9                     if (fields[i] != param.field){
10                         col.editor = null;
11                     }
12                 }
13                 $(this).datagrid(‘beginEdit‘, param.index);
14                 var ed = $(this).datagrid(‘getEditor‘, param);
15                 if (ed){
16                     if ($(ed.target).hasClass(‘textbox-f‘)){
17                         $(ed.target).textbox(‘textbox‘).focus();
18                     } else {
19                         $(ed.target).focus();
20                     }
21                 }
22                 for(var i=0; i<fields.length; i++){
23                     var col = $(this).datagrid(‘getColumnOption‘, fields[i]);
24                     col.editor = col.editor1;
25                 }
26             });
27         },
28         enableCellEditing: function(jq){
29             return jq.each(function(){
30                 var dg = $(this);
31                 var opts = dg.datagrid(‘options‘);
32                 opts.oldOnClickCell = opts.onClickCell;
33                 opts.onClickCell = function(index, field){
34                     if (opts.editIndex != undefined){
35                         if (dg.datagrid(‘validateRow‘, opts.editIndex)){
36                             dg.datagrid(‘endEdit‘, opts.editIndex);
37                             opts.editIndex = undefined;
38                         } else {
39                             return;
40                         }
41                     }
42                     dg.datagrid(‘editCell‘, {
43                         index: index,
44                         field: field
45                     });
46                     opts.editIndex = index;
47                     opts.oldOnClickCell.call(this, index, field);
48                     //添加事件--点击表格外部时表格编辑状态恢复为不可编辑
49                     $(document).on(‘click.endEdit‘,function (e) {
50                         if(!$(e.target).hasClass(‘datagrid-cell‘)&&e.target.tagName!="TD"){
51                             dg.datagrid(‘endEdit‘, opts.editIndex);
52                             $(document).off(‘.endEdit‘);
53                         }
54                     })
55                 }
56             });
57         }
58     });
59
60     $(function(){
61         $(‘#dg‘).datagrid().datagrid(‘enableCellEditing‘);
62     })
时间: 2024-10-05 11:50:27

jquery中的DOM事件绑定与解绑的相关文章

jquery中四个事件绑定方式(bind,live,delegate,on)

bind() 简要描述 bind()向匹配元素添加一个或多个事件处理器. 使用方式 $(selector).bind(event,data,function) event:必需项:添加到元素的一个或多个事件,例如 click,dblclick等: 单事件处理:例如 $(selector).bind("click",data,function); 多事件处理:1.利用空格分隔多事件,例如 $(selector).bind("click dbclick mouseout"

jquery 事件- 绑定与解绑

一.on() 的多事件绑定 $("#elem").on("mouseover mouseout",function(){ }); //多个事件绑定一个函数 $("#elem").on({ //多个事件绑定不同函数 mouseover:function(){}, mouseout:function(){} }); <div class="left"> <p class="aaron">

jQuery-3.事件篇---事件绑定与解绑

on()的多事件绑定 之前学的鼠标事件,表单事件与键盘事件都有个特点,就是直接给元素绑定一个处理函数,所有这类事件都是属于快捷处理.翻开源码其实可以看到,所有的快捷事件在底层的处理都是通过一个"on"方法来实现的.jQuery on()方法是官方推荐的绑定事件的一个方法. 基本用法:.on( events ,[ selector ] ,[ data ] ) 最常见的给元素绑定一个点击事件,对比一下快捷方式与on方式的不同 $("#elem").click(funct

JQuery_003_事件绑定与解绑

$(function () { //第一个按钮通过on的方式绑定点击事件 $("#btn1").on("click",function () { alert("我被点了"); }); //第二个按钮把第一个按钮的点击事件解绑 $("#btn2").on("click",function () { //off()参数:要解绑的事件的名字 $("#btn1").off("click

事件绑定与解绑

var EventUtil = { addHandler:function (obj, type, handler) { if(obj.addEventListener) { //如果是标准浏览器,即支持addEventListener的 console.log('标准浏览器'); obj.addEventListener(type, handler); } else if(obj.attachEvent) { //IE低版本浏览器 console.log('IE低版本浏览器'); obj.at

js元素事件绑定与解绑

为元素绑定事件有3种方式: 1.最常见的绑定方式: document.getElementById("btn").onclick=function(){}; 2.非IE浏览器     element.addEventListener(type,fn,false) (布尔值====true表示捕获,false表示冒泡,一般用false): document.getElementById("btn").addEventListener("click"

jquery中事件重复绑定以及解绑问题

一般的情况下,对于这种情况,我们常规的思路是,先解绑,再绑定,如下: $(selector).unbind('click').bind('click',function(){....}); 当这样会有一个问题,unbind会把其之前的所有的click事件都unbind掉,可能会影响其他的绑定,有如下有两种方法解决: 第一种: 使用事件命令空间,来唯一标识这个click的绑定,这样在解绑是不会将其他click绑定的事件也给解绑. $(selector).unbind('click.selector

锋利的jQuery读书笔记---jQuery中操作DOM

一般来说,DOM的操作分为3个方面,即DOM Core.HTML-DOM和CSS-DOM jQuery中的DOM操作主要包括以下种类: 查找节点 查找元素节点 查找属性节点 创建节点 创建元素节点 创建文本节点 创建属性节点 插入节点 插入节点的方法 方法 描述 示例 append() 向每个匹配的元素内部追加内容 HTML代码:<p>我想说:</p> jQuery代码:$("p").append("<b>你好</b>"

jquery 中 on 和普通绑定的区别

都说on是用于动态添加的元素的事件.但是你不觉得奇怪嘛,难道动态添加的元素就不能用普通的事件绑定,这样说不通啊! 其实是on可以在元素添加到dom之前绑定,而对于普通绑定,只要元素已经出现在了dom中,不论是否动态添加  事件当然也是生效的 $('body').on('click', '.d1', function(event) { //event.preventDefault(); console.log('on0');//ok }); console.log($('.d1')); $('.d