jQuery用on指令统一事件注册方式
注:jQuery1.7 之后支持
on可以注册简单的事件
//以点击事件为例$(\'选择器\').on(\'click\',function(){});
也可以注册事件委托,且支持动态绑定
$(\'选择器\').on(\'click\',\'xxx\',function(){});//\'xxx\'可以是标签,例如 <p>,<span>,<div>//也可以是 类名 或 id
举一个例子,方便更好的理解 动态绑定
这是一个记事本,里面有一些计划,很显然,该界面 tbody 部分由三个 tr 构成,每个 tr 中都有一个事件,以下为源码:
<!--html部分--><table style=\"width: 100%;\"><thead><tr><th style=\"width: 35%;\">事件</th><th style=\"width: 25%;\">时间</th><th>完成了嘛?</th></tr></thead><tbody id=\"shijian\"><tr class=\"list\"><td>吃饭饭</td><td>8:00</td><td><span>已完成</span> <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i></td></tr><tr class=\"list\"><td>睡觉觉</td><td>21:00</td><td><span class=\"delete\">已完成</span> <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i></td></tr><tr class=\"list\"><td>撸代码</td><td>2:00</td><td><span class=\"delete\">已完成</span> <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i></td></tr></tbody></table>
// js部分//on统一事件注册方式$(\".fa-trash-o\").click(function () {var deleteConfirm = confirm(\"确认删除嘛? \");if (deleteConfirm) {$(this).parent().parent().remove();}});
可以看到,垃圾桶图标代表了删除事件,这部分代码已经在js文件中写好了,当js部分的代码运行完成后,删除事件已经注册完成,故事件生效。
可是,当我们新添加一个事件进入表格后,由于之前进行的是简单注册,故新添加事件中的垃圾桶图标就不会有点击事件,也就意味着无法删除新添加事件
解决此问题有两种方法:
法一: 追加注册事件
//法一: 追加注册事件$add.find(\".fa-trash-o\").click(function () {var deleteConfirm = confirm(\"确认删除嘛? \");if (deleteConfirm) {$(this).parent().parent().remove();}});
用find方法找到垃圾桶图标所在类,为其追加点击事件
法二: on统一事件注册方式(推荐)
//on统一事件注册方式$(\"#shijian\").on(\"click\", \".fa-trash-o\", function () {var deleteConfirm = confirm(\"确认删除嘛? \");if (deleteConfirm) {$(this).parent().parent().remove();}});
在注册事件时,通过其父类找到事件所在类进行注册,这种方法支持了动态绑定事件