填坑之路:jquery事件绑定

最近边上班边做毕设(感觉自己马上要接到离职通知书了),好久没写原生js,遇到一个问题,前端请求返回了一个部门Json数组,大概长这样:

var json = [{
                dId: 1,
                level: 0,
                dName: '研发中心',
                pid: ''
            }, {
                dId: 101,
                level: 1,
                dName: '部门1',
                pid: 1
            }, {
                dId: 102,
                level: 1,
                dName: '部门2',
                pid: 1
            }, {
                dId: 103,
                level: 1,
                dName: '部门3',
                pid: 1
            }, {
                dId: 10101,
                level: 2,
                dName: '小组1',
                pid: 101
            },{
                dId: 10102,
                level: 2,
                dName: '小组2',
                pid: 101
            },{
                dId: 10201,
                level: 2,
                dName: '小组1',
                pid: 102
            },{
                dId: 10202,
                level: 2,
                dName: '小组2',
                pid: 102
            },{
                dId: 10203,
                level: 2,
                dName: '小组3',
                pid: 102
            }];

我需要把它渲染成树结构,这他么居然困扰了我一早上(一边做项目组任务,一遍切换做毕设,强行解释成精力没办法集中),晚上回来,认真写写就出来了;



    
        
        
        department
    
    
        

结果如下(旁边的图标是用来点击显隐组级部门用的,测试而已,没写样式,不要太在意):


填坑之路:jquery事件绑定_第1张图片
结果图!

你可能已经发现了,上面还有一个代码没写注释,我把它拎出来:

$("#Department").on('click','span',function(){
    alert($(this).siblings("input").val())
})

这就是jquery的比较常用的事件绑定,用关键字 on(当然以前也有 bind、live、delelgate 之类的),

$(selector).on(event,childselector,data,function)

参照我的写法,可以比较清楚的理解各个参数的意思,

  • event:必需项,这可以指定一个事件:‘click’,也可以指定一组事件:‘click dbclick mouseout’;
  • childselector:可选;表示需要添加事件处理程序的元素,一般为selector的子元素,没填则表示事件绑定在 $(selector) 上;
  • data:可选;需要传递的参数;
  • function:必需项;当绑定事件发生时,需要执行的函数;

既然已经知道了这个事件绑定了,那么什么时候用它呢?个人觉得平时给dom写事件,最好都采用绑定这样比较稳妥,因为我们知道,事件绑定的好处就是像无赖般一旦定义了,就是死死地绑在指定选择器对应的dom上了,不关你是原本就存在于document中的 还是后面 append进去的,只要你满足绑定条件,事件一定会触发。

回到之前的代码,我的写法是获取我点击的部门所对应的dId(因为我后面要根据这个id发请求去获取用户列表),那么当我把这段代码写在 script 的最前面的时候,我就得采用如上写法,用事件绑定到 #Department 下的 span节点上(因为页面渲染是按照文档顺序的,这时候下面进行的 append 等操作还没被渲染,所以页面文档树中还没有这些dom,如果没采用事件绑定 事件是肯定不会生效的)。
但如果我们把这段代码写在 append的后面,也就是在确保你要绑定事件的 append 已经都结束了,页面文档树长已经渲染了这些 dom 了,那么你就可以不用采用事件绑定了 :

$("#Department").find("span").on('click',function(){
    alert($(this).siblings("input").val())
})

这样也可以实现同样的功能的。
当然,个人建议是,在确认绑定事件不会影响后续操作时,能绑定的尽量去绑定吧。

你可能感兴趣的:(填坑之路:jquery事件绑定)