jquery 事件注册 与重复事件处理

<!doctype html>

<html lang="us">

<head>

<meta charset="utf-8">

<title> test</title>

<script src="./jquery-1.10.2.js" type="text/javascript"></script>

<script>

function initEvents(){

//注册多次事件方法初始化

initOnEvent();

initBindEvent();

initClickvent();

initLiveEvent();

//只注册一个事件方法

oneEventByBindUnBind();

oneEvnetByDieLive();

}

function initOnEvent(){

//为id为onWayToEvent 按钮注册点击事件

$("#onWayToEvent").on("click",function(){

alert("this is one on event")

});

$("#onWayToEvent").on("click",function(){

alert("this is two on event")

});

$("#onWayToEvent").on("click",function(){

alert("this is three on event")

});

}

function initBindEvent(){

//为id为bindWayToEvent 的按钮注册点击事件

$("#bindWayToEvent").bind("click",function(){

alert("this is registry event by bind. one")

});

$("#bindWayToEvent").bind("click",function(){

alert("this is registry event by bind. two")

});

$("#bindWayToEvent").bind("click",function(){

alert("this is registry event by bind. three")

});

}

function initClickvent(){

$("#clickWayToEvent").click(function(){

alert("this is registry event by click. one");

});

$("#clickWayToEvent").click(function(){

alert("this is registry event by click. two");

});

$("#clickWayToEvent").click(function(){

alert("this is registry event by click. three");

});

}

function initLiveEvent(){

$("#liveWayToEvent").live("click",function(){

alert("this is registry event by click. one");

});

/*

$("#clickWayToEvent").click(function(){

alert("this is registry event by click. two");

});

$("#clickWayToEvent").click(function(){

alert("this is registry event by click. three");

});

*/

}

function oneEventByBindUnBind(){

registryManyEvent("oneEvnetByBind");

$("#oneEvnetByBind").unbind("click").bind("click",function(){

alert("only you !!!!!!!");

});

}

function oneEvnetByDieLive(){

registryManyEvent("oneEvnetByDieLive");

$("#oneEvnetByDieLive").die().live("click",function(){

alert("the one of you !!!!!!");

});

}

function registryManyEvent(id){

$("#"+id).click(function(){

alert("this is registry event by common. one");

});

$("#"+id).click(function(){

alert("this is registry event by common. two");

});

$("#"+id).click(function(){

alert("this is registry event by common. three");

});

}

</script>

<style>

.info{

width:100%;

height:auto;

float:auto;

margin:10px;

}

</style>

</head>

<body onload="initEvents()">

<h1>Welcome to jquery registry event test</h1>

<button id="onWayToEvent" >通过on的方式多次注册事件</button>  </br>

<div class="info">

通过 on方法注册的事件,每次的注册不会把原来的方法覆盖掉。会以队列的形式保存起来

点击的时候,触发事情会一个个按注册的顺序执行。

主要代码:

function initOnEvent(){

//为id为onWayToEvent 按钮注册点击事件

$("#onWayToEvent").on("click",function(){

alert("this is one on event")

});

$("#onWayToEvent").on("click",function(){

alert("this is two on event")

});

$("#onWayToEvent").on("click",function(){

alert("this is three on event")

});

}

</div>

<button id="bindWayToEvent">通过bind的方法多次注册事件</button>

<div class="info" >

通过 jquery 的bind方法多次注册的方法也是一样,不会把原来的方法覆盖了,也是把方法以

队列的形式保存起来,触发事件后按注册次序逐个执行。

主要代码:

function initBindEvent(){

//为id为bindWayToEvent 的按钮注册点击事件

$("#bindWayToEvent").bind("click",function(){

alert("this is registry event by bind. one")

});

$("#bindWayToEvent").bind("click",function(){

alert("this is registry event by bind. two")

});

$("#bindWayToEvent").bind("click",function(){

alert("this is registry event by bind. three")

});

}

</div>

<button id="clickWayToEvent">通过click方法多次注册事件</button>

<div class="info" >

通过 jquery 的click方法多次注册的方法也是上面的效果一样 。

主要代码:

function initClickvent(){

$("#clickWayToEvent").click(function(){

alert("this is registry event by click. one");

});

$("#clickWayToEvent").click(function(){

alert("this is registry event by click. two");

});

$("#clickWayToEvent").click(function(){

alert("this is registry event by click. three");

});

}

</div>

<button id="liveWayToEvent">通过live 方法多次注册事件</button>

<div class="info" >

要怎么样才能把前面的事件给覆盖掉,只保留最后注册的事件方法?

</div>

<button id="oneEvnetByBind">通过unbind,bind方法进行事件的唯一注册</button>

<div class="info">

这个方法可以行得通

主要代码:

function oneEventByBindUnBind(){

registryManyEvent("oneEvnetByBind");

$("#oneEvnetByBind").unbind("click").bind("click",function(){

alert("only you !!!!!!!");

});

}

function registryManyEvent(id){

$("#"+id).click(function(){

alert("this is registry event by common. one");

});

$("#"+id).click(function(){

alert("this is registry event by common. two");

});

$("#"+id).click(function(){

alert("this is registry event by common. three");

});

}

</div>

<button id="oneEvnetByDieLive">通过 die live 方法进行事件的唯一加载</button>

<div class="info">

我们用的 jquery-1.10.2.js 这里没有提供 die live 方法。对于网上提供的这个方法是无效的。

主要代码:

function oneEvnetByDieLive(){

registryManyEvent("oneEvnetByDieLive");

$("#oneEvnetByDieLive").die().live("click",function(){

alert("the one of you !!!!!!");

});

}

function registryManyEvent(id){

$("#"+id).click(function(){

alert("this is registry event by common. one");

});

$("#"+id).click(function(){

alert("this is registry event by common. two");

});

$("#"+id).click(function(){

alert("this is registry event by common. three");

});

}

</div>

</body>

</html>

时间: 2024-08-07 21:16:29

jquery 事件注册 与重复事件处理的相关文章

jquery 事件,注册 与重复事件处理

jquery有时候会出现重复注册一个事件的问题,导致点击一个事件,这个事件被重复执行,也就是触发事件的次数有几次, 那么这个事件就会被执行叠加重复几次. 我这边做的一个项目,在某个页面初始化的时候,给一个控件注册了一个事件,后来发现,进入几次这个页面,因为进入页面会执行一次注册,这个事件就会被注册几次,被重复执行,没有覆盖. 上网查询了一下,总结了以下几种情况: 1,通过 on方法注册的事件,每次的注册不会把原来的方法覆盖掉.会以队列的形式保存起来点击的时候,触发事情会一个个按注册的顺序执行.

jQuery 事件注册和绑定及this与event.target的区别浅析

最近小码哥,在研究学习nodejs以及相关框架webpack.express.reactjs等等,为了将来,为了RMB,小码哥牢记自我充电,以备不时之需. 在学习reactjs的时候,在前辈ruanyifeng的博文里看到了一个以前没怎么注意的知识点.是与this和event.target之间的区别有关的.当时感觉就蒙了,发现event.target貌似印象不深啊,,瞬间小码哥开启了奔跑模式,,, 各种baidu,各种Chrome biying等等,发现区分不难,就是比较细致.不细分析,有点晕!

jquery事件重复绑定

本文实例分析了jQuery防止重复绑定事件的解决方法.分享给大家供大家参考,具体如下: 一.问题: 今天发现jQuery一个对象的事件可以重复绑定多次,当事件触发的时候会引起代码多遍执行. 下面是一个click事件被重复绑定的示例: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 function reg_button_click(){   $("#button).click(function(){     alert("button click");   }

JavaScript之jQuery-4 jQuery事件(页面加载后执行、事件处理、事件冒泡、事件对象、模拟操作)

一.jQuery 页面加载后执行 代码执行的时机选择 - $(document).ready()方法和 window.onload事件具有相似的功能,但是在执行时机方面是有区别的 - window.onload 事件是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行 - $(document).ready()方法注册的事件处理程序,在DOM完全加载后就可以调用 - 一般来讲, $(document).ready()的执行要优于window.onload事件 - 需要注意的是,

jquery事件之事件处理函数

一.事件处理 方法名 说明 语法 (events 事件类型,data数据,handler 事件处理函数,selector 选择器) Bind( 为每一个匹配元素的特定事件(像click)绑定一个事件处理器函数.没用on关键字 jQueryObject.bind( events [, data ], handler ) One 为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数.只绑定一次 jQueryObject.one( events [, data ], handler 

jquery事件重复绑定解决办法

jquery事件重复绑定解决办法 一$.fn.live 重复绑定 解决:使用die()方法,在live()方法绑定前,将此元素上的前面被绑定的事件统统解除,然后再通过live()方法绑定新的事件. //先通过die()方法解除,再通过live()绑定$(“#selectAll”).die().live(“click”,function(){//事件运行代码}); 二click等事件 解决:使用unbind("click")方法先解除绑定的事件再绑定新事件,即在给对象绑定事件之前先移除该

jQuery动态行绑定事件,发生重复绑定解决方案

背景: 系统需要动态增加分类,各分类下有各自的3项资金(有资金小计,问题就出在这里). 问题: 新增一条分类,需要给3项资金新绑定小计功能.这个时候会发现,初始第一行的计算,会调用两次,增加到三行的时候,第一行会重复计算三次,第二行会重复计算两次...以此类推 为什么会执行多次? 猜词: 新增一行,绑定计算函数,历史分类会累计事件.也就是说,每新增一行,历史的每一个分类都会增加一次事件绑定. 方案: 绑定事件前,删除事件.jQuery提供了on().live()绑定方法,对应的解绑事件off()

jquery事件学习笔记(转载)

一.页面载入1.ready(fn)当DOM载入就绪可以查询及操纵时绑定一个要执行的函数.这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度. 简单地说,这个方法纯粹是对向window.load事件注册事件的替代方法.通过使用这个方法,可以在DOM载入就绪能够读取并操纵时立即调用你所绑定的函数,而99.99%的JavaScript函数都需要在那一刻执行.有一个参数--对jQuery函数的引用--会传递到这个ready事件处理函数中.可以给这个参数任意起一个名字,并因此可以

第79天:jQuery事件总结(二)

上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 一.合成事件 jQuery有两个合成事件--hover()方法和toggle()方法,同ready()方法一样,这些都是jQuery自定义的方法. hover()方法:hover()方法的语法结构为: hover(enter, leave); hover()方法用于模拟鼠标悬停事件.当鼠标移动到元素上时,会触发指定的第一个函数(enter):当鼠标移