/*
事件绑定的格式:
元素节点.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
加在键盘事件上的 keydownkeyupkeypress
js 事件对象
原文地址:https://www.cnblogs.com/taohuaya/p/9609115.html