JQ~trigger与bind,触发与绑定何先何后?
最近在做项目时,遇到一个需求,事实上就是表单联动的问题,单击单选框,下面的复选框联动,当第一次加载时,默认触发第一个单选框,如图:
之前的方法,没有完成我的要求,第一次加载时,公司被选中,再“角色”这块并没有触发指定事件,代码如下:
//首次加载时,模拟Dept单击事件 $("input[name=Dept]").first().trigger("click"); //Dept单击事件 $("input[name=Dept]").live("click", function () { var deptid = $("input[name=Dept]:checked").val(); if (deptid == undefined) deptid = $("input[name=Dept]").first().val() $.get("/Common/PartialRole", { deptID: deptid }, function (data) { $("#roleList").html(data); }); });
经过分析,找到了原因,JQ的代码为顺序执行,当你执行到trigger时,下面的live方法会没有执行,这时,你触发的click事件是空的,所以,当然程序首次加载时
只是单选按钮被选中,事件方法主体并没有被触发,其它不是没有触发,而是方法本身是空的。
将trigger与live的顺序对调,效果实现
//Dept单击事件 $("input[name=Dept]").live("click", function () { var deptid = $("input[name=Dept]:checked").val(); if (deptid == undefined) deptid = $("input[name=Dept]").first().val() $.get("/Common/PartialRole", { deptID: deptid }, function (data) { $("#roleList").html(data); }); }); //首次加载时,模拟Dept单击事件 $("input[name=Dept]").first().trigger("click");
这时,再运行代码,程序执行到trigger代码段时,click方法已经被执行,这时,再进行trigger的触发,当然结果也就出来了。
小知识:JQ程序与其它程序执行的方式是相同的,代码自上而下运行,当然程序代码会更新你的条件语句改变执行的顺序,这是必然的,这个例子告诉我们,在使用trigger时,应该将它放到你触发的方法的下面,而不要放在上面!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2012-05-06 架构,改善程序复用性的设计~第二讲 什么应该提取出来,什么应该保留