js点击事件(click)的实现方法和(其他的事件对象)

一、3种实现方式

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>js点击事件</title>
</head>
<body>
    <!-- 第三种方式-->
    <button id="btn" onclick="threeFn()">点我</button>

    <script type="text/javascript">
        var btn = document.getElementById("btn");

        // 第一种 通过点击事件
        btn.onclick = function(){
            alert("这是第一种点击方式");
        }

        // 第二种 监听点击事件
        btn.addEventListener('click', function(){
            alert("这是第二种点击方式");
        })
        //btn.addEventListener('click', twoFn); function twoFn(){}; 
//通过函数名来引用外部函数
// 第三种 通过方法响应点击事件 function threeFn(){ alert("这是第三种点击方式"); } </script> </body> </html>

二、方式 ①、③ 一目了然,说明一下方式 ② :

document.addEventListener(),用于向文档添加事件句柄。

提示1:document.removeEventListener(),用来移除addEventListener()方法添加的事件句柄,不支持匿名添加的函数

提示2:使用 element.addEventListener(),方法为指定元素添加事件句柄

语法:  document.addEventListener(event, function, useCapture);

event:    事件名称,以点击事件为例,不要使用“on”前缀,要用“click”来取代“onclick”。

function:事件触发后执行的函数

useCapture:ture(事件句柄在捕获阶段进行)/   false(可选,默认。事件句柄在冒泡阶段进行)

捕获事件:当父子div都有点击事件时,先执行父级事件

冒泡事件:先执行子级事件

浏览器支持:谷歌1.0,ie 9.0,火狐1.0,opera 7.0 起开始支持

为了兼容其他早版本的浏览器可以使用 attachEvent() 方法来添加事件句柄。

if (document.addEventListener) { //所有主流浏览器
    document.addEventListener("click", myFunction);
} else if (document.attachEvent) { // IE 8 及更早 IE 版本,opera 7 及更早版本
    document.attachEvent("onclick", myFunction);
}

三、其他事件对象

HTML DOM 事件

HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序。事件通常与函数结合使用,函数不会在事件发生前被执行! (如用户点击按钮)。

下面说一下常用的鼠标事件和键盘事件。

鼠标事件

属性描述DOM
onclick 当用户点击某个对象时调用的事件句柄。 2
oncontextmenu 在用户点击鼠标右键时触发  
ondblclick 当用户双击某个对象时调用的事件句柄。 2
onmousedown 鼠标按钮被按下。 2
onmouseenter 当鼠标指针移动到元素上时触发。 2
onmouseleave 当鼠标指针移出元素时触发 2
onmousemove 鼠标被移动。 2
onmouseover 鼠标移到某元素之上。 2
onmouseout 鼠标从某元素移开。 2
onmouseup 鼠标按键被松开。 2

onmousemove 是鼠标在元素上移动时触发,且在元素上每移动一下就会触发一次。

onmouseover  是鼠标移入元素时触发一次,再次在元素上移动时不会触发,但是鼠标移入元素内的子元素时也会触发(冒泡)

onmouseenter 仅鼠标移入时,触发一次,且不冒泡

键盘事件

属性描述DOM
onkeydown 某个键盘按键被按下。 2
onkeypress 某个键盘按键被按下。 2
onkeyup 某个键盘按键被松开。 2

三者区别:

执行顺序:onkeydown–>onkeypress–>onkeyup

1. onkeydown:键盘一按下就触发的事件,键盘上任意键都会触发onkeydown()事件。捕获的keyCode不区分大小写

2. onkeypress:键盘一按下就触发的事件,同onkeydown(除去功能键,如:Esc,Shift,Ctrl..)区分大小写。

3. onkeyup:按键一松开就触发的事件。键盘上任意键都会触发onkeyup()事件。

特殊情况:

*三个事件都触发Enter键

*onkeydown和onkeyup同时存在,onkeyup不触发Fn。onkeyup单个触发

*三个事件同时存在时,alert只会弹出onkeydown和onkeypress

*只能在onkeydown事件中改变输入字符,如:event.keyCode=65;

*汉字拼音输入的过程只触发onkeydown和onkeyup

四:DOM 0 和 DOM 2 

0 级 DOM

分2个: 一是 在标签内写onclick事件 (方法3)

               二是 在 js 中写onclick= function(){ } 函数(方法1)

2级 DOM

1个:监听方法(方法2)

区别:

dom2不会覆盖会依次执行,dom 0 级会覆盖,执行最新事件。

dom0 和dom2 可以共存,不相互覆盖,dom 0 之前一定覆盖。

js内的点击事件(1)优先于标签内响应事件(3),点击事件和监听事件都要在页面加载后才可执行,比如把脚本放到body内容后面

0级dom为某个元素的同一行为绑定不同的方法在行内会分别执行,在<script>中会覆盖,也就是说标签内的响应事件是允许分别执行的,但是如果存在js内的同一行为事件,标签内的事件都会被覆盖掉。

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"></head>
<body>

<p>单击按钮触发函数。</p>
<button id="btn" onclick="myFunction();fun2()">点我</button>
<p id="demo"></p>
<script>
document.getElementById("btn").onclick = function(){
            alert("这是第1种点击方式");
}    
document.getElementById("btn").addEventListener('click', function(){
            alert("这是第二种点击方式");
})    
function myFunction(){ 
            alert("这是第3种点击方式");
}
function fun2(){
            document.getElementById("demo").innerHTML="Hello World1";
}
</script>
</body>
</html>

结果:执行 document.getElementById("btn").onclick,执行document.getElementById("btn").addEventListener   。

//  myFunction();fun2();不执行

<!DOCTYPE html>
<html>
<body>
<p>单击按钮触发函数。</p>
<button id="btn" onclick="myFunction();fun2()">点我</button>
<p id="demo"></p>
<script>   
function myFunction(){ 
            alert("这是第3种点击方式");
}
function fun2(){
            document.getElementById("demo").innerHTML="Hello World1";
}
</script>
</body>
</html>

结果:myFunction();fun2();都执行

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"></head>
<script>
document.getElementById("btn").onclick = function(){
            alert("这是第1种点击方式");
        }    
document.getElementById("btn").addEventListener('click', function(){
            alert("这是第二种点击方式");
        })
function myFunction(){
    alert("这是第3种点击方式");
}
    function fun2(){
    document.getElementById("demo").innerHTML="Hello World1";
}
    
</script>
</head>
<body>

<p>单击按钮触发函数。</p>
<button id="btn" onclick="myFunction();fun2()">点我</button>
<p id="demo"></p>

</body>
</html>

结果:myFunction();fun2();执行,其他不执行.

posted @ 2020-10-14 16:45  以深  阅读(25299)  评论(0编辑  收藏  举报
TOP