zoukankan      html  css  js  c++  java
  • 事件

    事件
      背景:
        因为JavaScript在浏览器中以单线程模式运行。页面加载后,一旦页面上所有的JavaScript代码被执行完后,就只能依赖触发事件来执行JavaScript代码。
       	浏览器在接收到用户的鼠标或键盘输入后,会自动在对应的DOM节点上触发相应的事件。如果该节点已经绑定了对应的JavaScript处理函数,该函数就会自动调用。
            由于不同的浏览器绑定事件的代码都不太一样,所以用jQuery来写代码,就屏蔽了不同浏览器的差异,我们总是编写相同的代码
    
    为什么要事件:
      处理用户操作,鼠标点击,键盘输入
    
    事件类型:3种
      1.鼠标事件
    
       2.键盘事件
        键盘事件仅作用在当前焦点的DOM上,通常是<input>和<textarea>。
        两个键一起按时
        if (e.ctrlKey && e.keyCode == 10) {
          alert("发送");
        }
    		事件参数
    		  有些事件,如mousemove和keypress,我们需要获取鼠标位置和按键的值,否则监听这些事件就没什么意义了。
    		  所有事件都会传入Event对象作为参数,可以从Event对象上获取到更多的信息:
    		  $(function () {
    		    $('#testMouseMoveDiv').mousemove(function (e) {
    		      $('#testMouseMoveSpan').text('pageX = ' + e.pageX + ', pageY = ' + e.pageY);
    		    });
    		  });
    
    
      3.其他事件
        focus:当DOM元素获得焦点时触发;
        blur:当DOM元素失去焦点时触发;
        change:当<input>、<select>或<textarea>的内容改变时触发;
        submit:当<form>提交时触发;
        ready:页面加载完成后触发。
        	其中,ready仅作用于document对象。由于ready事件在DOM完成初始化后触发,且只触发一次,所以非常适合用来写其他的初始化代码
        	由于ready事件使用非常普遍,所以可以这样简化:
    	      $(document).ready(function () {
    	      });
        		如果你遇到$(function () {...})的形式,牢记这是document对象的ready事件处理函数。
    
    绑定事件
    	function hello() {
        alert('hello!');
      }
      a.click(hello); // 绑定事件
    
    取消绑定(jquery)
      a.off('click', function) 解除绑定 
    
      // 10秒钟后解除绑定:
      setTimeout(function () {
        a.off('click', hello);
      }, 10000);
      需要特别注意的是,下面这种写法是无效的:
    
      // 绑定事件:
        a.click(function () {
          alert('hello!');
        });
    
      // 解除绑定:
        a.off('click', function () {
          alert('hello!');
        });
      这是因为两个匿名函数虽然长得一模一样,但是它们是两个不同的函数对象,off('click', function () {...})无法移除已绑定的第一个匿名函数。
      off('click')一次性移除已绑定的click事件的所有处理函数。
      无参数调用off()一次性移除已绑定的所有类型的事件处理函数。
    
    事件触发条件
      事件触发者:用户
      var input = $('#test-input');
      input.change(function () {
        console.log('changed...');
      });
      当用户在文本框中输入时,就会触发change事件。
      用JS代码去改动文本框的值,将不会触发change事件:
        var input = $('#test-input');
        input.val('change it!'); // 无法触发change事件
        input.change(); // 触发change事件
          有些时候,我们希望用代码触发change事件,可以直接调用无参数的change()方法来触发该事件
    
    事件传播机制
      分2个阶段:
        1、捕获事件阶段
        2、事件冒泡阶段
    
    冒泡阶段
      用"btn.oncklick"绑定事件处理函数,该事件是在冒泡阶段发生的
    
    捕获事件阶段
      用“ window.addEventListener()”绑定事件处理函数,可以在捕获阶段触发事件
      // DOM2级绑定事件 
      // addEventListener(事件名称,事件回调函数,是否捕获)
      // 第三个参数 true表示捕获阶段绑定 false表示冒泡阶段 默认值也是false
    
    事件委托(事件代理)
      当前事件源,委托祖先做某些事情(根据冒泡原理)
    
    
    事件对象:
      事件触发后会产生一个事件对象,包含事件信息
        document.onmousemove = function(e) {
          var e = e || window.event;//e就是事件对象,
        }
    事件冒泡
      e.stopPropagation?e.stopPropagation():e.cancelBubble = true;
      return false; // 阻止浏览器的默认行为
    

      

  • 相关阅读:
    字体下载大宝库:30款好看的免费英文字体
    jQuery Mapael – 呈现动态的矢量地图
    Qt:用 __thread 关键字让每个线程有自己的全局变量
    从C++到Qt(舍弃IDE或qmake、cmake等工具的束缚,尝试通过几个例子)
    C++11(及现代C++风格)和快速迭代式开发
    EventBus + Redis发布订阅模式
    并发、并行和高并发
    Span<T>和Memory<T>
    Lucene.Net做一个简单的搜索引擎-全文索引
    技术架构演变
  • 原文地址:https://www.cnblogs.com/xuanjian-91/p/10320719.html
Copyright © 2011-2022 走看看