关于JavaScript中的事件绑定,有些疑惑~

问题描述

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><a href="javascript:func('用a绑定');">bind by a</a><a href="javascript:func('用b绑定');">bind by b</a><input id="button" type="button" value="click" /></body></html><script type="text/javascript">function func(t1){var bt = document.getElementById('button');bt.addEventListener('click',b,false);function b(){alert(t1);}}</script>为什么多次点击bind by a或bind by b之后,再点击id为button的input,会出现多个alert窗口?重复绑定同一事件不是应该只算绑定一次吗? 问题补充:mutongwu 写道

解决方案

也就是说,每次绑定的b函数是不同的? 因为按标准来说,addEventListener多次绑定同一事件的同一函数,后面的绑定将覆盖前面的。 b函数是你在func函数内创建的闭包. 每次调用func都会重新创建一个b函数如果把b函数挪出func之外则不会发生此种情况,
解决方案二:
因为你每一次都定义了一个b.把 function b挪到 func 外面试试就知道了。
解决方案三:
addEventListener/attachEvent的事件绑定,支持同一个事件,多个处理函数。on + '事件名' 的事件绑定,仅仅支持一个处理函数。后面的绑定将覆盖前面的。

时间: 2024-08-31 13:44:23

关于JavaScript中的事件绑定,有些疑惑~的相关文章

JavaScript中的事件绑定的详解

给 DOM 元素绑定事件分为两大类:在 html 中直接绑定 和 在 JavaScript 中绑定. Bind in HTML 在 HTML 中绑定事件叫做内联绑定事件,HTML 的元素中有如 onclick 这样的 on*** 属性,它可以给这个 DOM 元素绑定一个类型的事件,主要是这样的: <div onclick="***">CLICK ME</div> 这里的 *** 有两种形式: 用字符串表示一段函数: <div onclick="v

JQuery中DOM事件绑定用法详解

 在文档加载完成后,如果打算为元素绑定事件来完成某些操作,则可以使用bind()方法来对匹配元素进行特定事件的绑定,bind()方法的调用格式为: bind( type [, data] , fn); bind()方法有3个参数,说明如下. 第1个参数是事件类型,类型包括:blur.focus.load.resize.scroll.unload.click.dblclick.mousedown.mouseup.mousemove.mouseover.mouseout.mouseenter.mou

JQuery中DOM事件绑定用法详解_jquery

本文实例讲述了JQuery中DOM事件绑定用法.分享给大家供大家参考.具体分析如下: 在文档加载完成后,如果打算为元素绑定事件来完成某些操作,则可以使用bind()方法来对匹配元素进行特定事件的绑定,bind()方法的调用格式为: bind( type [, data] , fn); bind()方法有3个参数,说明如下. 第1个参数是事件类型,类型包括:blur.focus.load.resize.scroll.unload.click.dblclick.mousedown.mouseup.m

浅析JavaScript中的事件机制

  这篇文章主要介绍了JavaScript中的事件机制,即JS与HTML的一般交互,需要的朋友可以参考下 事件是什么 ? JavaScript与HTML交互是通过在用户或浏览器操纵页面上发生的事件进行处理. 当页面加载,这是一个事件.当用户点击一个按钮,这一下,也就是一个事件.事件的另一个例子是类似按下任意键,关闭窗口,调整窗口等. 开发者可以使用这些事件执行JavaScript编码响应,这引起按钮以关闭视窗,消息,以便显示给用户,要验证的数据,以及几乎任何其它类型的响应可以发生的. 事件是文档

JavaScript中的事件委托及好处_javascript技巧

1,什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件. 也就是:利用冒泡的原理,把事件加到父级上,触发执行效果. 好处呢:1,提高性能. 我们可以看一个例子:需要触发每个li来改变他们的背景颜色. <ul id="ul"> <li>aaaaaaaa</li> <li>bbbbbbbb&l

详细讲解JavaScript中的this绑定_javascript技巧

this 可以说是 javascript 中最耐人寻味的一个特性,就像高中英语里各种时态,比如被动时态,过去时,现在时,过去进行时一样,无论弄错过多少次,下一次依然可能弄错.本文启发于<你不知道的JavaScript上卷>,对 javasript 中的 this 进行一个总结. 学习 this 的第一步就是明白 this 既不是指向函数自身也不指向函数的作用域.this 实际上是在函数被调用时发生的绑定,它指向什么地方完全取决于函数在哪里被调用. 默认绑定 在 javascript 中 ,最常

javascript中键盘事件用法实例分析_javascript技巧

本文实例分析了javascript中键盘事件用法.分享给大家供大家参考.具体如下: 键盘事件包含onkeydown.onkeypress和onkeyup这三个事件 事件初始化 function keyDown(){} document.onkeydown = keyDown; //论按下键盘上的哪个键,都将调用KeyDown()函数. DOM标准下 function keyDown(e) { var keycode = e.which; //取得对应的键值(数字) var realkey = S

理解JavaScript中worker事件api_javascript技巧

如果你不是很了解Event事件,建议先这篇文章<理解javascript中DOM事件>. 首先,我们需要实例一个Worker的对象,浏览器会根据新创建的worker对象新开一个接口,此接口会处理客户端与indexedDB数据库之间的通信.这里的数据库是指浏览器数据库.如果,你需要判断浏览器是否支持worker对象,详见如下代码.或者浏览器是否支持indexedDB数据库,详见同下,二者判断最好选择前者.因为IE不支持indexedDB . if(window.Worker){ dosometh

浅谈JavaScript的Polymer框架中的事件绑定_基础知识

既然是一套完整的前端框架那就一定有提供事件绑定相关的支持.其实在之前的例子中就使用过事件绑定,只是没有单独系统地介绍过而已. Polymer 的事件思想是对事件处理函数尽可能地都命名并定义到 VM 上,我觉得这个做法是在有意地把 VM 这一层隔离出来. 下面这个例子给按钮和其所在的 Shadow DOM Host 都绑定了个事件,点击按钮后两个事件都会触发. 运行 <script> var Polymer = { dom: 'shadow' }; </script> <bas