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 ...
随机推荐
- centos6安装系统时选包
date: 2018-06-05 11:44:06 1,系统:minimal 2,包组: Base System : Base.Compatibility libraries.Deb ...
- Arduino开发版学习计划--小车的行走
小车的前进后退,左右转弯 代码如下 void motor(char pin,char pwmpin,char state,int val) { pinMode(pin, OUTPUT); ) { an ...
- js实现购物车(源码)
首先是页面布局html+css部分 <!doctype html><html lang="en"> <head> <meta chars ...
- 安装TortoiseSVN客户端时遇到的异常
环境:WindowsXP,安装 双击SVN安装程序"TortoiseSVN-1.8.5.25224-win32-svn-1.8.8.msi"后,出现 "无法通过Sindo ...
- 02.Elasticsearch入门
Elasticsearch支持Http类型的Restful风格API请求,需要打开9200端口.Elasticsearch服务会监听两个端口9200和9300,9200提供Http Restf ...
- cpuspeed和irqbalance服务器的两大性能杀手
启用 irqbalance 服务,既可以提升性能,又可以降低能耗. irqbalance 用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance ...
- 虚拟网卡 TUN/TAP 驱动程序设计原理
简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在li ...
- 一个误区(关于javascript的字符串拼接)
前段时间听说了一个问题,说是,javascript中使用+=来拼接字符串会比使用Array的join方法慢几十倍以上,今天在工作间歇,就写了个例 子验证了一下,结果确完全相反,使用+=比join要快( ...
- 19.Delete Documents-官方文档摘录
1 插入例子 db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: & ...
- CentOS7.3 jdk、tomcat 安装步骤
jdk.tomcat 安装步骤 一.jdk 安装步骤 1.登录root用户 su - root 2.创建install目录 mkdir -p /usr/install 3.复制 对应的jdk 和tom ...