博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JQ~trigger与bind,触发与绑定何先何后?
阅读量:6322 次
发布时间:2019-06-22

本文共 1303 字,大约阅读时间需要 4 分钟。

最近在做项目时,遇到一个需求,事实上就是表单联动的问题,单击单选框,下面的复选框联动,当第一次加载时,默认触发第一个单选框,如图:

之前的方法,没有完成我的要求,第一次加载时,公司被选中,再“角色”这块并没有触发指定事件,代码如下:

//首次加载时,模拟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时,应该将它放到你触发的方法的下面,而不要放在上面!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
利用openSSL 生成RSA公钥和密钥
查看>>
Python xrange与range的区别
查看>>
强大的花名,我居然是“雕”
查看>>
新一代Web安全治理体系让“我的地盘我做主”不再只是梦
查看>>
php获取一些时间实现方法(实践)
查看>>
SQL Server发布订阅功能研究
查看>>
使用strtok_s函数从一个字符串中分离出单词
查看>>
用无人机打造空中搜索引擎
查看>>
MyEclipse在搭建s2sh时 如何 uninstalled facet
查看>>
python之函数
查看>>
Nodejs使用连接池连接数据库
查看>>
<转>lua解析脚本过程中的关键数据结构介绍
查看>>
实现IT创业的十三种模式分析
查看>>
云栖科技评论第25期:德州扑克人机大战落幕 人工智能赢了176万美元
查看>>
隐藏书签与书签隐藏
查看>>
web盲区(DNS,http)网站术语分析
查看>>
平台+生态是金融行业数字化转型的核心命题
查看>>
Check, if a process is running
查看>>
springmvc+jpa实现分页的两种方式
查看>>
ZIP 算法详解 (转!)
查看>>