jQuery 嵌套 event 会触发多次的原因

Html代码如下:

<div id="cover">
  <input type="button" id="inside" value="submit_inside" />
</div>
<div id="cover_js">
   <input type="button" id="inside_js" value="submit_inside_js" />
</div>
<input type="button" id="outside" value="submit_outside" />

jQuery代码如下:

$(‘#cover‘).mouseover(function () {
  $(‘#inside‘).click(function () {
    alert(‘multiple times‘);
  });
});

$(‘#cover_js‘).mouseover(function () {
  document.getElementById(‘inside_js‘).onclick = function () {
    alert(‘just one time‘);
  }
});

$(‘#outside‘).click(function () {
  alert(‘just one time‘);
});

id 为 inside 的按钮的 click 事件被嵌套在 div 的鼠标事件内,而 id 为 outside 的按钮则未嵌套,分别对两个按钮进行多次点击后,inside 按钮绑定的 click 事件会进行累加,而 outside 按钮则仍旧只绑定一个 click 事件。id 为 inside_js 的按钮的 click 事件也被嵌套在 div 的鼠标事件内,但是我用 javascript 实现 click,此时点击多次后,只触发一个 alert。
解决上述问题可以用 unbind 对嵌套 event 进行解绑:

$(‘#cover‘).mouseover(function () {
  $(‘#inside‘).off.(‘click‘).click(function () {
    alert(‘multiple times‘);
  });
});

原因:

jQuery所有的事件(.click.mouseover.hover 等等)都是通过on =>  event.add  =>  addEventListener,来实现的。

代码每次mouseover的时候就多绑定了一次事件回调。
原生的onclick每次赋值都直接覆盖了之前的onclick绑定,所以不推荐这样写。
若是用原生的addEventListener也会得到跟jQuery一样的结果。

时间: 2024-10-11 16:02:38

jQuery 嵌套 event 会触发多次的原因的相关文章

jquery嵌套后会触发2次点击事件, jquery的unbind就是卸载这个点击事件的.

$("#diva").click(function(){ $("#divb").unbind("click").click(function(){ alert("www.lao8.org 提供代码."); }); }); jquery嵌套后会触发2次点击事件, jquery的unbind就是卸载这个点击事件的.

解决jQuery中dbclick事件触发两次click事件

首先感谢这位小哥!http://qubernet.blog.163.com/blog/static/1779472842011101505853216/ 太长姿势了. 在jQuery事件绑定中,dbclick可以触发两次click事件.例如一个DOM元素div,既绑定了 click 事件,又绑定了 dblclick 事件,这两个事件分别要做独立的事情.事件处理上没有冲突,都可以各自完成各自的操作.双击的时候虽然是执行了 dblclick 事件,但是在这之前,也执行了click 事件,那么,如何来

jQuery的Event对象(实例)。

which属性用于返回触发当前事件时按下的键盘按键或鼠标按钮. 对于键盘和鼠标事件,该属性用于确定你按下的是哪一个键盘按键或鼠标按钮. which属性对DOM原生的event.keyCode和event.charCode进行了标准化. 适用的事件类型主要有键盘事件:keypress.keydown.keyup,以及鼠标事件:mouseup.mousedown. 该属性属于jQuery的Event对象(实例). jQuery 1.1.3 新增该属性. eventObject.which 返回值 w

jquery中event对象属性与方法小结

JQuery事件中的Event属性是经常性的被忽略的.大多数时间你的确不怎么用它,但有些时候它还是它还是有作用的.如获知触发时用户的环境(是否按了shift etc).每个浏览器对event都有不同的地方,Jquery对Event做了标准化所以可以放心用. * .target  这个反应触发事件的DOM对象,可以在事件冒泡的时候判断是否是事件源头(compare event.target to this) * .pageX:  鼠标的left属性,相对于page * .pageY:  鼠标的to

vue和jQuery嵌套实现异步ajax通信

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible&qu

jquery Ajax 不执行回调函数success的原因

jquery Ajax 不执行回调函数success的原因: $.ajax({ type: "post", contentType: "application/json", url: basePath+"pages/Tongji/disposeAgree.action?cepingitem="+cepingitem+"&userrelation="+userrelation, //data: {fenshu:8},da

安装VisualSVN Server 报&quot;Service &#39;VisualSVN Server&#39; failed to start. Please check VisualSVN Server log in Event Viewer for more details&quot;错误.原因是启动&quot;VisualSVN Server&quot;失败

安装VisualSVN Server 报"Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in Event Viewer for more details"错误.原因是启动"VisualSVN Server"失败 安装 VisualSVN Server 服务启动失败 咱们先来看一下这个服务在哪,计算机-右键-管理或者系统服务-在服务里面可以看到一个"

jQuery事件--- event.preventDefault() 取消点击动作的默认导航行为

event.preventDefault() 描述: 如果调用这个方法,默认事件行为将不再触发. event.preventDefault()   //这个方法不接受任何参数. 例如,在执行这个方法后,如果点击一个链接(a标签),浏览器不会跳转到新的 URL 去了.我们可以用 event.isDefaultPrevented() 来确定这个方法是否(在那个事件对象上)被调用过了. 帮助文档:http://www.w3school.com.cn/jquery/jquery_ref_events.a

jQuery之event

今天了解了一下jQuery中的事件event,使用jQuery好处就是不用去考虑那么多的兼容. 鼠标事件:click dblclick mousedown mouseup mouseenter mouseleave mouseover  mouseout 鼠标事件最常用的就是上述几个了.关于click mousedown  mouseup  如果将这三个事件绑定在同一个元素上,那么触发的顺序将是 mousedown  mouseup  click .然后再来看看mouseleave和mouseo