jQuery 相关控件的事件操作分解


Posted in Javascript onAugust 03, 2009

今天突然对他的事件产生了兴趣,先前也碰到过,也没整理,今天有空就弄一下咯。

对于控件的事件,jQuery已经提供了丰富的方法,包括绑定、一次绑定、触发等,阿拉今早看看叫一哪能用额伐,大虾路古就可以了。

jQuery的绑定事件非常方便,有bind、live、one还有它帮你把一些常用的事件给单独了出来,比如控件的onclick事件,我们绑定onclick事件的时候只需要

$("#testButton").click(function() { 
alert("I'm Test Button"); 
});

就这样我们在testButton这个按钮上绑定了onclick事件,执行alert语句。我们也可以使用$("#testButton").click();来触发这个onclick事件,一切都非常ok啦。以上有点sb了,接下来看看取消事件。jQuery有unbind的方法,专门来取消绑定的,也就是取消事件,按照上面的例子的话,应该使用:$("#testButton").unbind("click");恩,看上去非常好,如果你的click有2个事件的话,你还可以使用unbind("click", fnName)来删除特定函数的绑定。为什么有这个取消特定函数的方法呢,我们来看下例子,我们会发现,javascript的事件,跟C#的事件如出一辙,事件的绑定是叠加(+=) 而不是覆盖。
var Eat = function() { 
alert("我要吃饭"); 
} var PayMoney = function() { 
alert("先付钱"); 
} 
jQuery(document).ready(function() { 
$("#testButton").click(Eat); 
$("#testButton").bind("click", PayMoney); 
});

通过上面的例子,我们发现会先弹出:“我要吃饭”紧接着会弹出“先付钱”,说明它的绑定是通过onclick+=fn进行的。我们修改下ready的方法:
jQuery(document).ready(function() { 
$("#testButton").click(Eat); 
$("#testButton").unbind(); 
$("#testButton").bind("click", PayMoney); 
});

又出错了,呵呵,这次点击按钮的话,只会执行PayMoney,不会执行Eat,那如果把unbind()放在bind后面的话,这样这个按钮就不会起作用了。但如果我要去掉绑定的PayMoney方法呢?这时候我们应该这样写:
jQuery(document).ready(function() { 
$("#testButton").click(Eat); 
$("#testButton").bind("click", PayMoney); 
$("#testButton").unbind("click", PayMoney); 
});

嘿嘿,跟bind其实一个样,不过接下来你将看到一个bug(我不知道算不算),让我们近距离体验一下
<input id="testButton" type="button" value="Test Button" onclick="Eat();" />  
<script type="text/javascript">  
jQuery(document).ready(function() { 
$("#testButton").unbind("click", Eat); 
$("#testButton").unbind(); 
$("#testButton").bind("click", PayMoney); 
}); 
</script> 

大家猜猜,会显示什么?吃饭?付钱?答案是Eat -> PayMoney,啊!!!我这里取消了绑定,又删除了特定的绑定,为什么还会执行Eat呢?其中的原由要看jQuery的类库了,我估计它只删除了通过JQuery绑定的那些事件了,呵呵。那这时候我们该如何呢?好在jQuery有很多方法,其中一个就是attr,他是对Dom元素的属性进行操作,我们利用attr来消除input上的click事件。 $("#testButton").attr("onclick", "");这样就可以把onclick事件清除了,记住,attr上因为是元素的属性,所以这里要写 “onclick” 而不是click,因为click是jQuery封装好的简写方式。好了,绑定就到这里了,弄个场景,大家也好记得住点:一日,老应、老赵、老陈出去吃饭,吃饱了,喝足了,准备付钱了,这时候
:<head>  
    <script type="text/javascript" src="jquery-1.2.6.min.js"></script>  
    <script type="text/javascript">  
        var PayMoney = function(name) {   
            alert(name + ":今天我请客,我来付钱");   
        }   
        jQuery(document).ready(function() {   
            $("#JeffreyPay").attr("onclick", "");   
            $("#JamesPay").attr("onclick", "");   
            $("#JeffreyPay").click(function() {   
                alert("。。。。这里不能刷卡");   
            });   
            $("#JeffreyPay").click(function() {   
                PayMoney("陈大");   
            });   
            $("#JamesPay").bind("click", function() {   
                alert("。。。。忘记带钱包了");   
            });   
            $("#JamesPay").bind("click", $("#DlyingPay").attr("onclick"));   
        });   
    </script>  
</head>  
<body>  
    <input id="JeffreyPay" onclick="PayMoney('赵帅');" type="button" value="老赵付钱" />  
    <input id="JamesPay" type="button" onclick="PayMoney('老应');" value="老应付钱" />  
    <input id="DlyingPay" type="button" onclick="PayMoney('陈大');" value="老陈付钱" />  
</body> 

以上内容均为原创,不要用在邪恶的地方哦。其实在绑定事件上还存在很多bug,大家可以稍微修改下上面的效果就会知道了,比如自动执行,绑定失败等,呵呵。
Javascript 相关文章推荐
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
Aug 13 Javascript
javascript 实现键盘上下左右功能的小例子
Sep 15 Javascript
js对象的复制继承实例
Jan 10 Javascript
javascript内置对象操作详解
Feb 04 Javascript
JQuery复制DOM节点的方法
Jun 11 Javascript
window.location.reload 刷新使用分析(去对话框)
Nov 11 Javascript
浏览器兼容的JS写法总结
Apr 27 Javascript
详解JavaScript中this关键字的用法
May 26 Javascript
Bootstrap table分页问题汇总
May 30 Javascript
jquery replace方法去空格
May 08 jQuery
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
Jun 02 Javascript
利用javascript实现一些常用软件的下载导航
Aug 03 #Javascript
jQuery 隔行换色 支持键盘上下键,按Enter选定值
Aug 02 #Javascript
一句话JavaScript表单验证代码
Aug 02 #Javascript
JavaScript 关键字屏蔽实现函数
Aug 02 #Javascript
Javascript 验证上传图片大小[客户端]
Aug 01 #Javascript
Javascript 汉字字节判断
Aug 01 #Javascript
JS 面向对象的5钟写法
Jul 31 #Javascript
You might like
php&amp;java(一)
2006/10/09 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
实例讲解php数据访问
2016/05/09 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
javascript json 新手入门文档
2009/12/03 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
Python常用库推荐
2016/12/04 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
Django web框架使用url path name详解
2019/04/29 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
python制作抽奖程序代码详解
2021/01/15 Python
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
环境工程大学生个人的自我评价
2013/10/08 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
保研推荐信格式
2015/03/25 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
Go web入门Go pongo2模板引擎
2022/05/20 Golang
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers