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 相关文章推荐
经过绑定元素时会多次触发mouseover和mouseout事件
Feb 28 Javascript
详解js闭包
Sep 02 Javascript
javascript中键盘事件用法实例分析
Jan 30 Javascript
javascript实现图片上传前台页面
Aug 18 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
Apr 05 Javascript
浅谈jQuery before和insertBefore的区别
Dec 04 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
Feb 05 Javascript
微信小程序 PHP生成带参数二维码
Feb 21 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
May 17 Javascript
详解使用create-react-app添加css modules、sasss和antd
Jul 31 Javascript
vue实现一个炫酷的日历组件
Oct 08 Javascript
原生js实现俄罗斯方块
Oct 20 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 日期加减的类,很不错
2009/10/10 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
微信小程序 获取设备信息 API实例详解
2016/10/02 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
在Python中使用正则表达式的方法
2015/08/13 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
Python for循环生成列表的实例
2018/06/15 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
python tqdm库的使用
2020/11/30 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
大学生新闻专业个人自我评价
2013/11/12 职场文书
应届生新闻编辑求职信
2013/11/19 职场文书
高中生期末评语大全
2014/01/28 职场文书
环保倡议书范文
2014/05/12 职场文书
2014年度培训工作总结
2014/11/27 职场文书