小议jQuery中的事件

时间:2022-12-14 09:16:38

学了jQuery这么长时间,到这里真的有一种柳暗花明又一村的感觉,在这里先表达一下自己学这一章节的happy心情吧(在严厉的金工实习老师眼皮底下偷偷学习,当然还有各种nerves~)。

1加载DOM

在JS中浏览器装载文档通常使用window.onload方法,而在jQuery中使用的是$(document).ready()方法~这两人区别在哪里呢,JS必须等每一幅图片加载完毕后才能进行操作,网页的所有元素对jQuery而言都是可以访问的,但这并不意味着这些元素关联的文件都已经下载完毕哦,只要DOM就绪就可以操作了,何苦等所有图片都下载完毕,so,速度就这样相形见绌了~还有一点就是JS的onload事件一次只能保存对一个函数的引用,他会自动用后面的函数覆盖前面的函数,因而不在现有的行为上添加新的行为,所以为了达到两个函数顺序触发的效果JS会选择

 window.onload=function(){
one();
two();
}

但这种方法不能解决某些需求例如多个文件使用window.onload方法加载多个JS文件。这样我们就可以每次调用$(document).ready()方法在现有行为上追加新的行为

 function one(){
alert("one");
}
function two(){
alert("two");
}
$().ready(function(){
one();
})
$().ready(function(){
two();
});

2事件绑定

bind()方法调用格式为

bind(type [,data], fn);

第二个参数为可选参数,作为event.data属性值传递给事件对象的额外数据对象。

与ready()方法一样,bind()方法也可以多次调用,在代码中如果发现$(this).next()被多次调用,可以为它定义一个局部变量

 $(function(){
$("#panel h5.head").bind("click",function(){
var $content=$(this).next();
if($content.is(":visible")){
$content.hide();
}else{
$content.show();
}
})
})

改变绑定事件的类型及简写绑定事件

 $(function(){
$("#panel h5.head").mouseover(function(){
$(this).next().show();
}).mouseout(function(){
$(this).next().hide();
})
})

3合成事件

jQuery有两个合成事件,那就是被我们灰常广泛的应用的hover()和toggle()方法,属于自定义方法。

hover()方法的结构为:

hover(enter,leave);该方法用于模拟光标悬停事件,当光标移动到元素上时会触发指定的enter,移出时会触发leave.

eg:

$(function(){
$("#panel h5.head").hover(function(){
$(this).next().show();
},function(){
$(this).next().hide();
});
});

toggle()方法可谓是老生常谈了,这里就不多啰嗦什么了吧~

结构:

toggle(fn1,fn2,fn3,...fnN);模拟鼠标连续单击事件,每次单击都是重复对这几个函数的轮番调用。

4事件冒泡和事件捕获

事件冒泡和事件捕获是一个相反的过程。

很多情况下事件冒泡会产生很多问题,那么如何停止事件冒泡呢~(event.stopPropagation();可谓是杀手锏~

5阻止默认行为

网页中的元素有自己的默认行为,eg单击超链接人家就会跳转,单击提交按钮后表单会提交,但有时我们需要阻止元素的默认行为,

比如当表单不符合提交条件时要阻止表单的提交。在jQuery中我们亮剑"preventDefault()"方法来阻止元素的默认行为。

 <script type="text/javascript">
$(function(){
$("#sub").bind("click",function(event){
var usename=$("#username").val();
if(username==""){
$("#msg").html("<p>文本框内容不能为空</p>>");
event.preventDefault(); }
});
}) </script>
<form action="test.html">
用户名:<input type="text" id="username"/>
<input type="submit" value="提交" id="sub"/>
</form>
<div id="msg"></div>

如果想同时对事件对象停止冒泡和默认行为,可以在事件处理函数中返回false。

return false;

这可比同时调用event.preventDefault();//阻止默认行为   和  event.stopPropagation();//停止事件冒泡   简单快捷多了~

6事件对象的属性

event.type,event.target//获取到触发事件的元素.event.relatedTarget//除mouseover和mouseout外的相关元素,event.pageX和event.pageY这些属性就看名字也就明白是怎么回事了,就不多说废话了。

event.which

 $("a").mousedown(function(e){
alert(e.which)//1=鼠标左键 2=鼠标中键 3=鼠标右键
})

event.metaKey

众所周知,不同浏览器对<ctrl>按键的解释是不同的,有道是魔高一尺道高一丈,针对这个问题,jQuery对此进行了封装,并规定event.metaKey为键盘事件中获取<ctrl>按键。

7移除事件

关于移除事件那点说小不小的事,除了我们所熟悉的unbind()方法还有一个神奇的东西,one()方法,该方法对绑定的函数只触发一次,随后立即解除绑定关系。

8模拟操作

很多情况下是用户通过单击按钮等操作才能触发click事件,但在很多很多情况下需要模拟用户操作,这样有什么好处呢,外卖都送到宿舍门口了,不需要用户单击的才是更方便的啊~

trigger()不仅可以触发浏览器支持的具有相同名称的事件比如click ,也可以触发自定义名称的事件,关键是人家还可以传递参数

 $("#btn").trigger("click");

 $("#btn").trigger("myClick");

 $("#btn").trigger("myClick",["我的自定义"。“事件”]);

9相关元素的其他用法

A绑定多个事件类型

 $(function(){
$("div").bind("mouseover mouseout",function(){
$(this).toggleClass("over");
});
});

2添加事件命名空间,便于管理
例如可以把为元素绑定的多个事件类型用命名空间规范起来

 $(function(){
$("div").bind("click.plugin",function(){
$("body").append("<p>click事件</p>");
$("div").bind("mouseover.plugin",function(){
$("body").append("<p>mouseover事件</p>");
$("div").bind("dblclick.plugin",function(){
$("body").append("<p>dblclick事件</p>");
});
$("button").click(function(){
$("div").unbind(".plugin")};
});
});

未完待续......

小议jQuery中的事件的更多相关文章

  1. jQuery中的事件绑定方法

    在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...

  2. jQuery:详解jQuery中的事件(二)

    上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 接上篇jQuery:详解jQuery中的事件(一) ...

  3. jQuery:详解jQuery中的事件(一)

    之前用过一些jQuery的动画和特效,但是用到的部分也不超过10%的样子,感觉好浪费啊——当然浪费的不是jQuery,而是Web资源.后来就想深入研究下jQuery的内部机理,读过两遍jQuery源代 ...

  4. jQuery学习笔记(三)jQuery中的事件

    目录 加载DOM 事件绑定 合成事件 事件冒泡 移除事件 一.加载DOM Javascript 与HTML之间的交互是通过用户操作浏览器页面引发的事件来处理的.jQuery提供了丰富的事件处理机制.从 ...

  5. Javascript事件模型系列(三)jQuery中的事件监听方式及异同点

    作为全球最知名的js框架之一,jQuery的火热程度堪称无与伦比,简单易学的API再加丰富的插件,几乎是每个前端程序员的必修课.从读<锋利的jQuery>开始,到现在使用jQuery有一年 ...

  6. jQuery中的事件与动画 &lpar;你的明天Via Via&rpar;

    众所周知,页面在加载时,会触发load事件:当用户单击某个按钮时,会触发该按钮的click事件. 这些事件就像日常生活中,人们按下开关,灯就亮了(或者灭了),往游戏机里投入游戏币就可以启动游戏一样, ...

  7. Jquery中的事件和动画

    在学习Jquery中的过程中我们绝大部分都用到了事件的操作,也可以说事件是Jquery中必不可少的一部分,我们常见的一些事件有单击事件,鼠标事件,键盘事件等等.在Jquery中的学习中为了能使让页面以 ...

  8. jQuery中的事件机制深入浅出

    昨天呢,我们大家一起分享了jQuery中的样式选择器,那么今天我们就来看一下jQuery中的事件机制,其实,jQuery中的事件机制与JavaScript中的事件机制区别是不大的,只是,JavaScr ...

  9. jQuery中的事件和动画——《锋利的jQuery》(第2版)读书笔记2

    第4章 jQuery中的事件和动画 jQuery中的事件 加载DOM $(document).ready(function(){   // 编写代码... }); 可以简写成: $(function( ...

随机推荐

  1. XML 数据请求与JSON 数据请求

    (1)XML 数据请求 使用 AFNetworking 中的 AFHTTPRequestOperation 和 AFXMLParserResponseSerializer,另外结合第三方框架 XMLD ...

  2. log4net各种Filter使用

    log4net里面的filter类常用的为: 1.DenyAllFilter 拒绝所用的日志输出 <filter type="log4net.Filter.LevelMatchFilt ...

  3. Visual C&plus;&plus; 开发心得与调试技巧

    自己平时收集的一些技巧与心得,这里分享出来,普及一下知识. 1.如何在Release状态下进行调试 Project->Setting=>ProjectSetting对话框,选择Releas ...

  4. nodejs学习笔记之mongoDB

    这两天在学习nodejs,但是发现那本书nodejs入门指南上所用的好多方法都报错. 这里主要说下数据库部分 关于注册部分:书上创建数据库那里可能要小心点,用户名不存在的时候,下面调用save的对象要 ...

  5. Oracle RAC的五大优势及其劣势

    Oracle RAC的五大优势及其劣势 不同的集群产品都有自己的特点,RAC的特点包括如下几点: 双机并行.RAC是一种并行模式,并不是传统的主备模式.也就是说,RAC集群的所有成员都可以同时接收客户 ...

  6. django查询数据库无法过滤月份的解决

    我试过,当settings里的:USE_TZ = False时也可以查询,但是数据库里的时间就会显示错的 解决方法是可以再终端输入 mysql_tzinfo_to_sql /usr/share/zon ...

  7. eclipse中如何自动生成构造函数

    eclipse中如何自动生成构造函数 eclipse是一个非常好的IDE,我在写java程序的时候使用eclipse感觉开发效率很高.而且有很多的快捷和简便方式供大家使用,并且能直接生成class文件 ...

  8. mysqldump定时备份数据库

    mysql服务器ip:192.168.0.10 备份服务器ip:192.168.0.11 数据库名称:db_product 思路:在mysql服务器A上创建一个用户分配权限专门用于数据库备份,A服务器 ...

  9. 协议无关组播-密集模式 PIM-DM

    一.组播路由协议 (一) 路由器依靠转发项来转发组播数据包.转发项的生成则是组播路由协议所要完成的任务.组播路由协议有距离矢量组播路由协议(DVMRP).协议无关组播-密集模式(PIM-DM).协议无 ...

  10. Cognos中新建SQLserver数据源的步骤

    1:配置-数据源连接-新建数据源-指定数据源名称 2:选择数据库类型,暂时不配置jdbc 3:指定服务器,数据库名称,登陆用户名和密码 4:测试 5:测试OK(OLE DB类型的) 6:返回上一步 , ...