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();執行,其他不執行.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM