美文网首页
2018-09-26 Day27 - JS中的事件处理

2018-09-26 Day27 - JS中的事件处理

作者: Deathfeeling | 来源:发表于2018-09-26 17:38 被阅读0次

一、JavaScript中的事件处理

1、在标签上使用onXXX属性来进行事件绑定(不推荐使用)
        <button onclick="sayHello()">按钮1</button>
        <script type="text/javascript">
            function sayHello(){
                alert("Hello!");
            }
2、通过代码获取标签绑定onXXX属性(不推荐使用)
        <button id="button1">按钮1</button>
        
        <script type="text/javascript">
            var button1 = document.getElementById("button1");
            button1.textContent = "点我呀!";
            button1.onclick = sayHello;
            function sayHello(){
                alert("Hello!");
            }
        </script>
3、通过diamante获取标签然后使用addEventListener绑定事件(推荐)

方法一:内部JS

        <button id="button1">按钮1</button>
        
        <script type="text/javascript">
            var button1 = document.getElementById("button1");
            //判断因为IE浏览器低版本不兼容
            if (button1.addEventListener){
                button1.textContent = "点我呀!";
                button1.addEventListener("click",sayHello);
                button1.addEventListener("click",sayGoodbye);
                button1.addEventListener("click",function(){
                    button1.removeEventListener("click",sayHello); //移除事件监听
                    button1.removeEventListener("click",sayGoodbye);
                })
            }else{ 
                //低版本IE浏览器使用的代码
                button1.attachEvent("onclick",sayHello);
                button1.attachEvent("onclick",sayGoodbye);
                button1.attachEvent("click",function(){
                    button1.detachEvent("onclick",sayHello); //移除事件监听
                    button1.detachEvent("onclick",sayGoodbye);
                })
            }

            function sayHello(){
                alert("Hello!");
            }
            function sayGoodbye(){
                alert("Goodbye!")
            }
        </script>

方法二:外部封装JS函数

<!DOCTYPE html>
<html>
   <head>
       <meta charset="utf-8" />
       <title></title>
   </head>
   <body>
       <button id="button1">按钮1</button>
       
       <script src="js/new_file.js"></script>
       <script type="text/javascript">
           var button1 = document.getElementById("button1");
           // 绑定事件的回调函数(callback function)
           // 你知道事件发生的时候,但是不知道事件什么时候发生,只是进行绑定。
           bind(button1, "click", sayHello);
           bind(button1, "click", sayGoodbye);
           bind(button1, "click", function(){
               onbind(button1, "click", sayHello);
           })

           function sayHello(){
               alert("Hello!");
           }
           function sayGoodbye(){
               alert("Goodbye!")
           }
       </script>
   </body>
</html>

//js文件
function bind(elem, event, fn){
   if (elem.addEventListener){
       elem.addEventListener(event, fn);
   }else{
       elem.attachEvent("on" + event, fn);
   }
}

function onbind(elem, event, fn){
   if (elem.removeEventListener){
       elem.removeEventListener(event, fn);
   }else{
       elem.detachShader("on" + event, fn);
   }
}

在事件回调函数中获取事件源(易错点)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="buttons">
            <button>button1</button>
            <button>button2</button>
            <button>button3</button>
            <button>button4</button>
            <button>button5</button>
        </div>
        
        <script src="js/javascript.js"></script>
        <script type="text/javascript">
            var buttons = document.querySelectorAll("#buttons>button");
            for (var i = 0; i<buttons.length; i+=1){
            //如果希望在事件回调函数中获得事件源
            //应该通过事件对象的target属性去获取事件源       
                bind(buttons[i], "click", function(evt){   
                    //取事件源不能用下标去获取
                    evt = evt || window.event; //兼容ie代码
                    evt.target.textContent = "欧耶";
                })
            }

        </script>
    </body>
</html>

二、事件回调函数和事件对象

绑定事件监听器的函数都需要传入事件的回调函数,程序员因为事件发生的时候要做什么,但是不知道什么时候发生,所以传入一个函数在将来发生事件的时候,由事件调用,这种就叫回调函数。

回调函数的第一个参数代表事件对象(封装了和事件相关的所有信息),对于低版本的IE,可以通过window.event来获取事件对象。

事件对象的属性和方法:
1、target / srcElement(IE) - 事件源(引发事件的标签)

2、阻止事件的默认行为,比如:a标签 --> preventDefault()

                    if (evt.preventDefault){
                        evt.preventDefault();
                    }else{
                        evt.returnValue = false; //兼容ie
                    }

3、事件的捕获和冒泡
事件冒泡 内 --> 外(子代-->父代)(默认 false)
事件捕获 外 --> 内 (true)

停止事件传播(捕获和冒泡) -- stopPropagation()
IE浏览器只有冒泡 -- cancelBubble = true

猜数字游戏(网页版)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>

    </head>
    <body>
    
        <input type="number" id="input" placeholder="猜0~10的数字"/>
        <input type="button" id="confirm" value="确定">   
        
        <script type="text/javascript">
            var count = 0;
            var num = parseInt(Math.random()*11);
            var guess = document.getElementById("input");
            var confirm = document.getElementById("confirm");
            confirm.addEventListener("click", guess_number);
            // 判断回车
            guess.addEventListener("keydown",function(evt){
                evt = evt || window.event;
                if (evt.keyCode == 13 || evt.which == 13){
                    guess_number();
                }
            })
            
            function guess_number(){
                var thyAnswer = parseInt(guess.value);
                count += 1;
                if (thyAnswer > num){
                    alert("大了大了~");
                }else if(thyAnswer < num){
                    alert("小了小了~");
                }else if(thyAnswer == num){
                    alert("恭喜你猜对了,一共猜了"+count+"次!");
                    confirm.disabled = true; //禁止按钮
                    guess.disabled = true;  //禁止输入框
                }
                guess.value = "";  //清除文本框内容
                guess.focus();  //获得焦点
    
            }
        </script>
    </body>
</html>

效果:


三、JS中创建对象常用方法

1、


2、


相关文章

  • 2018-09-26 Day27 - JS中的事件处理

    一、JavaScript中的事件处理 1、在标签上使用onXXX属性来进行事件绑定(不推荐使用) 2、通过代码获取...

  • javascript 高级 -- jQuery-事件绑定

    事件的处理程序在js当中很重要的。事件驱动是js的重要组成部分。在js中,有html中处理程序,dom0级,dom...

  • React 事件处理机制

    React在处理事件和HTML中JS处理事件不同,本文介绍React中的事件处理机制。React中不同通过返回fa...

  • js中的事件

    简单总结一下js中的事件 事件处理程序 事件委托 各种各样的事件总结 事件中的this指向 事件处理程序 直接在D...

  • JavaScript的事件机制详解

    【js事件详解】js事件封装函数,js跨浏览器事件处理机制 一、事件流 事件流描述的是从页面中接受事件的顺序。IE...

  • js事件机制

    一、js事件机制三个阶段:事件捕获、事件目标处理函数、事件冒泡 js中事件执行的整个过程称之为事件流,分为三个阶段...

  • 浏览器中的事件循环与Node中的事件循环

    浏览器中的事件循环 JS线程读取并执行JS代码 执行JS代码的过程中,指定异步的操作给对应的线程处理 异步线程处理...

  • 事件循环机制

    事件循环(evenloop) 事件循环机制是宿主环境提供的。js中处理异步,增加了任务队列的概念(你不知道的js中...

  • js中的blur函数和addEventListener的一些细节

    question: js中的blur方法执行是直接触发调用blur事件处理函数 还是 将这个事件处理函数放...

  • React基础2:React事件处理机制

    一、事件处理 1、React事件和DOM事件 2、this关键字的问题 面向对象编程中this的问题:js中thi...

网友评论

      本文标题:2018-09-26 Day27 - JS中的事件处理

      本文链接:https://www.haomeiwen.com/subject/fvhdoftx.html