事件

事件
  背景:
    因为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; // 阻止浏览器的默认行为

  

 

posted on 2019-01-25 17:22  悬剑  阅读(91)  评论(0编辑  收藏  举报

导航