/*
事件绑定的格式:
元素节点.on + 事件类型 = function(){

}

元素节点
事件类型
on+事件类型:事件处理函数
【注】上述三者一绑定:生成一个新的事件对象。
【注】触发事件以后,系统会去调用相关的事件处理函数。

事件对象获取:系统调用相关的函数的时候,会直接将生成的事件对象,当做参数传入到我们的函数内部。

已下代码演示用到的html结果:

<body>
<button id = "btn1">按钮</button>
</body>

*/

            window.onload = function(){
var oBtn = document.getElementById('btn1');
/*所以
oBtn.onclick = function(){} 就是一个事件对象
oBtn 也是一个对象,所以我们把上面中的.onclick = function(){}看作是 oBtn对象的一个方法(函数);
我们把这个事件函数写在这以后,什么事件调用的呢?
我们都知道,只有按钮被点击时才会调用这个事件函数,所以这个函数是系统给调用的。
【注】我们自己调用得在页面写如下代码
oBtn.onclick();//我们自己调用 */ //}

继续看:

            window.onload = function(){
var oBtn = document.getElementById('btn1'); oBtn.onclick = function(){
alert(1);
} oBtn.onclick();//我们自己调用 }

// 这样页面加载过程中就会弹出 消息框   1,点击按钮后也会弹出 消息框 1;

/* 我们再来看一下 oBtn.onclick = function(){} 在调用的时候我们并没有传参,我们利用arguments(函数内置的数组 arguments(只要声明一个
函数,系统就会自动分配一个arguments数组)用来存函数内的参数);*/

//测试一 我们自己调用时 给传入实参会怎么

            window.onload = function(){
var oBtn = document.getElementById('btn1'); oBtn.onclick = function(){
alert(arguments);
} oBtn.onclick(10);//我们自己调用 给他一个实参 10 }

//给我们的弹窗为 [object Arguments] 说明是一个Arguments对象

/*我们再来看一下我们传入的10 有没有存进去*/

            window.onload = function(){
var oBtn = document.getElementById('btn1'); oBtn.onclick = function(){
alert(arguments[0]);//arguments函数内数组的0号下标
} oBtn.onclick(10);//我们自己调用 给他一个实参 10 }

//我们的测试结果是 10 说明我们的 实参已经传入了进去。

/*测试二 我们来看一下 系统给我们调用时 会给arguments 函数内数组 传入什么*/

            window.onload = function(){
var oBtn = document.getElementById('btn1'); oBtn.onclick = function(){
alert(arguments[0]);//arguments函数内数组的0号下标
}
//点击页面上的按钮,让系统自己调用 }

//点击页面上的按钮 给我们弹出 [object MouseEvent] 翻译出来是鼠标事件对象 ,刚好click就是鼠标事件类型的一种,
//所以系统在调用时传入的参数是一个 事件对象

/*
通过上面的arguments[0]的方式我们可以拿到 这个事件函数的 事件对象,但是我们都知道,在编程中能不用arguments就不用
arguments,所以我们准备给事件函数添加一个自定义形参ev(因为事件的英语单词为event,所以我们就自定义了一个ev方便代码阅读)
即oBtn.onclick = function(ev){};具体代码如下*/

            window.onload = function(){
var oBtn = document.getElementById('btn1'); oBtn.onclick = function(ev){
alert(ev);//查看我们的形参
} }

效果与上图相同

可以看出通过自定义形参的方式依然可以得到 事件对象
但是在IE8以下不支持这中形式,但是IE给我们提供了一种方式 通过window.event
具体代码如下

            window.onload = function(){
var oBtn = document.getElementById('btn1'); oBtn.onclick = function(){
alert(window.event);//IE8下的方法 ,看看能弹出点什么
} }

//弹出的内容为 [object PointerEvent] 也是鼠标事件对象的意思,所以我们可以通过这个方法获取,
//怎么才能兼容所有的浏览器呢,这里有个获取事件对象的固定格式写法,具体代码如下

            oBtn.onclick = function(ev){
var e = ev || window.event;
//alert(e); }

//利用 或运算的短路操作给 变量 e 赋值 。
//var e = ev || window.event; 这句语句的意思是 变量 e 如果浏览器有 ev 形参这种方式 或运算后面的 window.event 就不计算了,
//所以e 也就等于 ev 了,如果没有ev这种形式,就执行后面的语句 e也就等于window。event了;

/*
费劲心思的拿到 事件对象 是因为 事件对象有很多属性要加在事件对象上。
例如鼠标事件上的 .button .clientX .clientY .pageX .pageY .screenX .screenY
修改键(快捷键)属性 .shiftKey .ctrlKey .altKey .metaKey
加在键盘事件上的 keydown keyup keypress

最新文章

  1. 易企秀微场景2016最新完整版V10.5,小编亲测修复众多错误
  2. 《jQuery判断radio、checkbox、select 是否选中和设置选中问题以及获取选中值》总结
  3. LeetCode 64 Minimum Path Sum
  4. jquery ui bootstrap日期插件
  5. MediaElement视频控制:播放、暂停、停止、后退、快进、跳转、音量
  6. Powershell 批量替换文件
  7. Subversion服务器搭建
  8. poj-2393 Yogurt factory (贪心)
  9. poj-3056 http://poj.org/problem?id=3056
  10. Oracle单个数据文件超过32G后扩容
  11. C语言客户端服务器代码
  12. 随心测试_数据库_002 &lt;数据库系统组成&gt;
  13. jar包中File 文件找不到的异常分析与解决
  14. P1546 最短网络 Agri-Net题解(克鲁斯卡尔)
  15. leetcode 算法分类
  16. java.lang.OutOfMemoryError: PermGen space (jvm内存泄漏解决办法)
  17. python全栈开发 * 27知识点汇总 * 180710
  18. perl 函数
  19. s21day01 python笔记
  20. libcur+openssl的编译,使之支持SSL&lt;转&gt;

热门文章

  1. HTTP协议和SOCKS5协议
  2. numpy笔记—np.sum中keepdims作用
  3. 转--利用hexo搭建个人静态博客
  4. 消除 transition 闪屏
  5. C++常量 运算符
  6. CF949D Curfew
  7. CF912E Prime Gift
  8. Python sys.path详细介绍
  9. 移动前端框架,require.js压缩
  10. JS浮点数运算Bug的解决办法