addEventListener、onclick和jquery的bind()、click()
addEventListener("click",function(event){},false);
removeEventListener("click",function(event){},false);
target.addEventListener(type, listener, options);
target.addEventListener(type, listener, useCapture);
target.addEventListener(type, listener ,{capture: Boolean, passive: Boolean, once: Boolean});
addEventListener是JS原生的绑定事件函数
target默认使用window,因此通常省略。
type为事件监听类型,如“click”、"mouseup"等。
listener为监听函数,默认带有event参数,即function(event){}
useCapture Boolean 指在DOM树中,注册了该listener的元素,是否会先于它下方的任何事件目标,接收到该事件。沿着DOM树向上冒泡的事件不会触发被指定为use capture(也就是设为true)的listener。当一个元素嵌套了另一个元素,两个元素都对同一个事件注册了一个处理函数时,所发生的事件冒泡和事件捕获是两种不同的事件传播方式。事件传播模式决定了元素以哪个顺序接收事件。进一步的解释可以查看 事件流 及 JavaScript Event order 文档。 如果没有指定, useCapture 默认为 false 。对于事件目标上的事件监听器来说,事件会处于“目标阶段”,而不是冒泡阶段或者捕获阶段。在目标阶段的事件会触发该元素(即事件目标)上的所有监听器,而不在乎这个监听器到底在注册时useCapture 参数值是true还是false。
options可以使用一个参数也可以使用一个带有三个参数的对象
capture: Boolean,表示 listener 会在该类型的事件捕获阶段传播到该 EventTarget 时触发。其实就是useCapture。
once: Boolean,表示 listener 在添加之后最多只调用一次。如果是 true, listener 会在其被调用之后自动移除。
passive: Boolean,表示 listener 永远不会调用 preventDefault()。如果 listener 仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告。
解说:
在事件分派时添加事件处理器,当一个 EventListener 在 EventTarget 正在处理事件的时候被注册到 EventTarget 上,它不会被立即触发,但可能在事件流后面的事件触发阶段被触发,例如可能在捕获阶段添加,然后在冒泡阶段被触发。
多个相同的事件处理器,同一个 EventTarget 注册了多个相同的 EventListener,那么重复的实例会被抛弃。所以这么做不会使得 EventListener 被调用两次,也不需要用 removeEventListener 手动清除多余的EventListener ,因为重复的都被自动抛弃了。
处理过程中 this 的值的问题,通常来说this的值是触发事件的元素的引用,这种特性在多个相似的元素使用同一个通用事件监听器时非常让人满意。,当使用 addEventListener() 为一个元素注册事件的时候,句柄里的 this 值是该元素的引用。其与传递给句柄的 event 参数的 currentTarget 属性的值一样。如果一个事件的属性( 例如. onClick)是指定在一个HTML的元素上的,则这个属性中的JavaScript语句实际上会被包裹在一个处理函数中,在这个处理函数中使用this的效果和使用addEventListener来绑定事件的效果是一样的; this的出现代表了元素的引用。注意到在一个函数里this调用的的效果和标准规则里面是一样的。
click()函数用于为每个匹配元素的click事件绑定处理函数。
该函数也可用于触发click事件。click事件就是鼠标按钮单击事件。此外,你还可以额外传递给事件处理函数一些数据。此外,你可以为同一元素多次调用该函数,从而绑定多个事件处理函数。触发click事件时,jQuery会按照绑定的先后顺序依次执行绑定的事件处理函数。要删除通过click()绑定的事件,请使用unbind()函数。该函数属于jQuery对象(实例)。
jQueryObject.click( [ [ data ,] handler ] )
如果指定了至少一个参数,则表示绑定click事件的处理函数;没有指定任何参数,则表示触发click事件。
| 参数 | 描述 |
|---|---|
| data | 可选/任意类型触发事件时,需要通过event.data传递给事件处理函数的任意数据。 |
| handler | 可选/Function类型指定的事件处理函数。 |
jQuery 1.4.3 新增支持:click()支持data参数。参数handler中的this指向当前DOM元素。click()还会为handler传入一个参数:表示当前事件的Event对象。click()函数的返回值为jQuery类型,返回当前jQuery对象本身。
如果函数handler的返回值为false,则表示阻止元素的默认事件行为,并停止事件在DOM树中冒泡。例如,<a>链接的click事件的处理函数返回false,可以阻止链接的默认URL跳转行为。
经验:
在使用jqgrid框架开发时,需要将表格的特定行设置成不能选中,发现怎么修改click()事件,如添加函数event.preventDefault(),都不能阻止可选的上层组件监听事件。最后深入了解click的api终于发现可以在传入一个handler函数后再加一个false参数,一下就阻止了默认选中监听事件,并阻止将事件触发冒泡到table框架组件中,秀一秀代码:
$(function () {
setTimeout(function() {
$("table tbody tr").each(function(indexTr, elementTr) {
$(elementTr).children("td[aria-describedby='basMgmtGridIdGrid_mainItem']:empty").
each(function (indexTd, elementTd) {
var rowid = $(elementTr).attr("id");
$(elementTr).off("click").unbind("click").click(function(event) {}, false);
$(elementTd).prevAll("td[aria-describedby='basMgmtGridIdGrid_cb']").
children(":checkbox").attr("disabled","disabled").remove();
});
});
}, 200);
});
addEventListener、onclick和jquery的bind()、click()的更多相关文章
- js的onclick和jquery的bind事件执行先后顺序
近期在项目中为每一个ajax触发按钮写正在加载的效果,用的是bootstarp 代码如下 $(function(){ $('.btn').bind('click',function(e){ var $ ...
- JQuery中bind和unbind函数与onclick绑定事件区分
JQuery中bind和unbind函数转载: https://blog.csdn.net/liucheng417/article/details/51131982 页面代码: <body& ...
- jQuery方法区别:click() bind() live() delegate()区别
今天看到一篇jquery 事件的文章,自己写了个小例子,虽然2种方式都可以实现,但是不太明白,找了点资料 $("#box1").delegate("p",&qu ...
- jQuery绑定事件方法及区别(bind,click,on,live,one)
第一种方式: ? 1 2 3 4 5 $(document).ready(function(){ $("#clickme").click(function(){ alert(& ...
- jquery .live() .delegate() .bind() .click()区别
什么是.live()? 除了让你对Dom元素现在和将来绑定事件之外,.live() 方法和.bind()方法很像.你可以用.live()方法对没有存在的Dom节点绑定事件.考虑下面的情况. 当用户要离 ...
- jquery阻止冒泡事件:$('span').bind("click",function(event){event.stopPropagation();})(有用源)
冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件. <body> <div id="content"> 外层div元素 <span> ...
- JQuery 的Bind()事件
刚开始我们先看一下它的定义: .bind( eventType [, eventData], handler(eventObject)) .Bind()方法的主要功能是在向它绑定的对象上面提供一些事件 ...
- Jquery中bind(), live(), on(), delegate()四种注册事件的优缺点,建议使用on()
jquery中注册的事件,注册事件很容易理解偏差,叫法不一样.我第一反应就是如何添加事件,使用onclick之类的,暂时不讨论js注册事件的方法. 也看到园内前辈写过相关的帖子,但不是很详细,我找到了 ...
- Jquery动态bind绑定已有函数,函数自动执行的问题解决方法
在bind后面的方法,不能带括号,带括号函数就自动执行了... <script> //通过子元素删除某行 function deleteRow() { var flag = confirm ...
随机推荐
- 给vmware虚拟机设置Ip,使用xshell远程连接Centos
参考下面两位的分享才弄好,发表之前先对原作者表示感谢! 给Centos配置网络以及使用xshell远程连接Centos http://www.cnblogs.com/fuly550871915/p/4 ...
- 技术宅之flappy bird 二逼鸟
师雪坤和刘阳 风靡一时的虐心小游戏<Flappy Bird>,以玩法简单.难度超高著称,不过,最近这款让全世界玩家几欲怒摔手机的游戏,被两位中国技术宅设计的"玩鸟机器人" ...
- 设置PYTHONIOENCODING
PYTHONIOENCODING=utf8
- Cgroups子系统介绍
blkio -- 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等). cpu -- 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问. cpuacct ...
- 拼团商品列表页 分析 js代码行位置对执行的影响和window.onload的原理 setTimeout传参
w TypeError : Cannot set property 'innerHTML' of nullTypeError : Cannot set property 'value' of null ...
- (转)聊聊Servlet、Struts1、Struts2以及SpringMvc中的线程安全
前言 很多初学者,甚至是工作1-3年的小伙伴们都可能弄不明白?servlet Struts1 Struts2 springmvc 哪些是单例,哪些是多例,哪些是线程安全? 在谈这个话题之前,我们先了解 ...
- 并发编程 - io模型 - 总结
1.提交任务得方式: 同步:提交完任务,等结果,执行下一个任务 异步:提交完,接着执行,异步 + 回调 异步不等结果,提交完任务,任务执行完后,会自动触发回调函数2.同步不等于阻塞: 阻塞:遇到io, ...
- Mac 下,Redis(集群)的安装和配置
1. Redis 安装步骤 1. 到github下载redis,我下载的是3.0.4 下载地址:GitHub 2. 将下载下来的redis-3.0.4.tar.gz拷贝到 /usr/local 目录下 ...
- python序列化和json
python 的序列化和反序列化用于内存之间的共享,包括服务器和客户端的共享,两个Python程序之间的共享,以及以字符串的形式存储到硬盘中. pyhton 的pickle 可以对Python的各种数 ...
- ruamel.yaml 将字典写入yaml文件
#安装 pip install ruamel.yaml import os from ruamel import yaml # 将字典写入到yaml my_dic = { 'name': '张三', ...