DOM事件

栏目: JavaScript · 发布时间: 5年前

内容简介:注:部分参考来源:JavaScript 高级程序设计(第3版)

注:部分参考来源:JavaScript 高级程序设计(第3版)

什么是事件

  • 事件就是文档或浏览器窗口中发生的一些特定的交互瞬间。

事件流

  • 事件流描述的是从页面中接收事件的顺序。
  • IE的事件流是事件冒泡流。
  • Netscape Communicator 的事件流是事件捕获流。

事件冒泡

  • IE的事件流叫做事件冒泡。
  • 单击页面中的<div>,这个click事件按照下图顺序传播:

DOM事件

事件捕获

  • Netscape Communicator 团队的事件流叫做事件捕获。
  • 单击页面中的<div>,这个click事件按照下图顺序传播:

DOM事件

HTML事件

  • 直接在HTML元素标签内添加事件、执行脚本。
  • 语法:<tag 事件 = “执行脚本”></tag>
  • 在HTML元素上绑定事件。
  • 执行脚本可以是一个函数的调用
  • 缺点:HTML代码和javaScript代码紧密耦合。
<input type="button" value = "弹出"  onclick = "alert('我是按钮')">

DOM0级事件

  • 语法:ele.事件 = 执行脚本
  • 功能:在DOM对象上绑定事件
  • 说明:执行脚本可以是一个匿名函数,也可以是一个函数的调用
<div class="btn" id="btn">开始</div>
<script>
    var btn = document.getElementById("btn");
    btn.onclick = function () {
        alert("我是按钮!!");
    }
</script>

DOM2级事件

  • 定义了两个方法:addEventListener()、removeEventListener()
  • 3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。
<div id="button">按钮</div>
<script>
    var btn = document.getElementById("button");
    btn.addEventListener("click",function(){
        alert("Hello world!");
    },false);
</script>

事件类型

  • UI事件
  • 焦点事件
  • 鼠标事件
  • 滚轮事件
  • 文本事件
  • 键盘事件
  • 合成事件
  • 变动事件
onload:页面加载时触发 onclick:鼠标点击时触发
onmouseover:鼠标滑过时触发 Donmouseout:鼠标离开时触发
onfoucs:获得焦点时触发 onblur:失去焦点时触发
onchange:域的内容改变时发生

小例子:当脚本放在head之间时 ,加 onload

<script>
   //页面加载时执行,unload页面卸载
   window.onload = function(){
    var btn = document.getElementById("btn");
    btn.onclick = function () {
        alert("我是按钮!!");
    }
}
</script>

小例子: onfoucs、onblur

<style>
    .tip{
        display: none;
    }
</style>

<script>
    var phone = document.getElementById("phone"),
        tip = document.getElementById("tip");
    phone.onfocus = function(){
        tip.style.display = "block";
    }
    phone.onblur = function(){
        var phoneVal = this.value;
        if(phoneVal.length == 11 && isNaN(phoneVal) == false){
            tip.innerHTML = "输入正确";
          /* tip.innerHTML = "<img src='img/1.png'>";*/
        }
        else {
            tip.innerHTML = "输入错误";
        }
    }
</script>

小例子:onchange

<div class="box">
    请选择颜色:
    <select name="" id="menu">
        <option value="">请选择</option>
        <option value="#f00">红色</option>
        <option value="#0f0">绿色</option>
        <option value="#00f">蓝色</option>
        <option value="#ff0">黄色</option>
        <option value="#ccc">灰色</option>
    </select>
</div>
<script>
     var menu = document.getElementById("menu");
     menu.onchange = function(){
     var bgcolor = this.value;
     if(bgcolor == ""){
        document.body.style.background = "#fff";
     }
     else{
       document.body.style.background = bgcolor;
     }
 }
</script>

键盘事件与keyCode属性

onkeydown:在用户按下一个键盘按键时发生 onkeypress:在键盘按键被按下并释放一个键时发生
onkeyup:在键盘按键被松开时发生 keyCode:返回onkeypress、onkeydown或onkeyup 事件触发的键的值的字符代码,或键的代码

小例子:keyCode

document.onkeypress = function(event){
    console.log(event.keyCode);
}

小例子:onkeyup

<style>
   .text span{
       font-weight: bold;
       color: #f00;
   }
    em{
        font-style: normal;
    }
</style>
<div>
    <p class="text">您还可以输入<span><em id="count">30</em>/30</span></p>
    <div class="input">
        <textarea name="" id="text" cols="70" rows="4"></textarea>
    </div>
</div>
<script>
    //获取文本框
    var text = document.getElementById("text");
    var total = 30;
    var count = document.getElementById("count");
    //绑定键盘事件
    document.onkeyup = function(){
      //获取文本框的长度
     var len = text.value.length;
        var allow = total - len;
        count.innerHTML = allow;
  }
</script>

事件委托

  • 事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。即:利用冒泡机制将一类事件触发尽可能高的委托给其父节点或祖先节点来触发事件处理函数,这样只需要定义一个函数,访问一次DOM对象,减少了内存的占用以及访问DOM元素的时间,降低了性能的消耗。如:li-->ul
<ul class="box">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>
<script>
    var list = document.querySelector(".box");
    list.onclick = function (e){
        var e = e || window.event;
        var targer = e.target || e.srcElement;
        if(targer.nodeName.toLowerCase() === "li"){
            console.log(targer.textContent);
        }
    }
</script>
<div class="btn-list">
    <button id="1">1</button>
    <button id="2">2</button>
    <button id="3">3</button>
</div>
<script>
    var btnList = document.querySelector(".btn-list");
    btnList.onclick = function (e){
        var e = e || window.event;
        var targer = e.target || e.srcElement;
        switch (targer.id) {
            case "1":
                console.log(targer.textContent);
                break;
            case "2":
                console.log(targer.textContent);
                break;
            case "3":
                console.log(targer.textContent);
                break;
        }
    }
</script>

不好的地方,请多多指教


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

开发高质量PHP框架与应用的实际案例解析

开发高质量PHP框架与应用的实际案例解析

Sebastian Bergmann / 刘文瀚、刘海燕 / 清华大学出版社 / 2012-6 / 49.00元

PHP已经成为最受欢迎的编程语言之一,这使得用PHP创建高质量、易维护的应用程序和框架比以往受到更多的青睐。通过使用来自于知名公司的真实案例研究,《开发高质量PHP框架与应用的实际案例解析》为Web软件体系结构的不同层次介绍了规划、执行以及测试自动化方面的内容,并解释了这些公司如何测量和测试软件质量。《开发高质量PHP框架与应用的实际案例解析》作者Sebastian Bergmann、Stefan......一起来看看 《开发高质量PHP框架与应用的实际案例解析》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具