易盈娱乐线上赌球


易盈娱乐线上赌球无事静观己手相,何等迥异入胸膛。妙品己之复生韵,无脑尚可秀新魂。
易盈娱乐线上赌球秦白笑了,他就知道肯定会有这样的说法,他就知道易飞没办法拒绝魅影。易盈娱乐线上赌球小姑娘:呵呵~你还真幽默看你长的傻糊糊的!没想到君有才华难摸出啊?
易盈娱乐线上赌球初夏时节,我与同伴一起带上必要的航材及简单的几样专用工具,登上了开往辽南的列车,去某机场搞一次技术服务。由于是相隔半年多的第二次到访,顾戏称为故地重游。
易盈娱乐线上赌球坐火车,旁边是个美女,想找些话题和她搭讪,刚开口她就问我有没有口香糖。我说:“有啊!”美女:“你能不能先吃一个?”易盈娱乐线上赌球而所谓的金枪,当然意指金枪不倒,包含了双重意思在其中。易盈娱乐线上赌球只愿倾尽一生去爱倾一世去恋只做你的痴儿
易盈娱乐线上赌球心中的一些旧虽是不动声色,却是饱满丰盈的,亦如旧人,旧物,旧事。就那样旧着,被岁月和故事浸泡着。仿若前尘一个痴情的女子手扣门环,等她的心上人,穿越几千年的风尘,那样痴着,就那样。寂寞着,静美着。
易盈娱乐线上赌球就像月亮那寒冷的生
易盈娱乐线上赌球他相信自己的眼光,而易飞也没有辜负他的眼光。易盈娱乐线上赌球不过,目前许多人都在拭目以待,因为经济稳步发展,所以多数人都看好指数能破六千。易盈娱乐线上赌球 今天下午去教室时,一群学生围着我要QQ账号,一个2班的小女孩搂着我的肩膀,说:老师,我们好喜欢你啊。当时我觉得惊奇,我没有给他们上过课。我是新闻组组员,只是因为工作去教室几次。孩子们的回答是,每次我看见他们都会主动向他们问好,下课经常和他们聊天,上完舞蹈课还会提醒他们喝水。当时我很感动,我做的只是再平常不过的事,微不足道,想不到这些孩子都一一记在心里。他们记得我的好,
易盈娱乐线上赌球毕竟高进的相貌固然谈不上什么英俊或者帅气,可是那种奇特的气质却才是真正吸引人的。

皇冠足球比分

大发论坛时时彩平台尊龙娱乐是黑网吗海天国际娱乐城注册送钱凯发娱乐乐宝娱乐城真人赌钱bodog888亚美国际娱乐城 金龙国际 www.am8.com 亚洲城娱乐 老k国际娱乐城 666k8.com 金威国际娱乐城 名人国际娱乐城 ag娱乐平台 V博娱乐城 国际利来娱乐网站地图百家乐代理注册送钱e8889.com网站地图赌牛牛攻略网站地图888真人彩民网站地图宝博会官网网站地图http://tinyurl.com/pte2tt5网站地图信誉赌场网站地图宝胜娱乐城网站地图国语学校网站地图澳门【注册送钱e8889.com】网站地图金沙搏彩网网站地图http://tinyurl.com/q9mwdyu网站地图独赢百家乐网站地图七星娱乐注册网站地图捷豹赌场网站地图福彩乐透l乐博彩论坛网站地图优博国际注册送钱e8889.com网站地图澳门赌场有哪些网站地图http://tinyurl.com/pb9z3gj网站地图最新娱乐城送现金网站地图永鑫娱乐城网站地图国语学校网站地图大白菜电子游戏网站地图百嘉乐棋牌游戏网站地图永胜博网站地图澳门真人赌场官网网站地图凤凰国际娱乐城网站地图bet365a1.com网吧进不去网站地图真人注册送钱e8889.com网站地图http://tinyurl.com/ol3tu4m网站地图


随笔- 109  文章- 60  评论- 453 

先看看下面一道题目,请评价以下代码并给出改进意见:

if (window.addEventListener) {//标准浏览器
  var addListener = function(el, type, listener, useCapture) {
    el.addEventListener(type, listener, useCapture);
  };
} else if (document.all) {//IE
  addListener = function(el, type, listener) {
    el.attachEvent("on" + type, function() {
      listener.apply(el);
    });
  }
}

1)不应该在if和else语句中声明addListener函数,应该先声明;

2)不需要使用window.addEventListener或document.all来进行检测浏览器,应该使用能力检测;

3)attachEvent在IE中有this指向问题,会指向window,虽然上面的代码做了指向处理,但是匿名函数不能做detachEvent解绑

改进后的代码稍后加上。

 

一、冒泡与捕获

使用过addEventListener方法的会发现最后一个参数“useCapture”,用于控制是捕获还是冒泡。

何为冒泡、捕获,请看下面的例子:查看在线代码,在线代码中用了三层。

<div id="click1">
  <div id="click2">事件</div>
</div>

1)Netscape主张元素1的事件首先发生,这种事件发生顺序被称为捕获型,如下图所示:

               | |
---------------| |-----------------
| click1       | |                |
|   -----------| |-----------     |
|   |click2    \ /          |     |
|   -------------------------     |
|        Event CAPTURING          |
-----------------------------------

2)微软则保持元素2具有优先权,这种事件顺序被称为冒泡型,如下图所示:

               / \
---------------| |-----------------
| click1       | |                |
|   -----------| |-----------     |
|   |click2    | |          |     |
|   -------------------------     |
|        Event BUBBLING           |
-----------------------------------

3)W3C选择了一个择中的方案。任何发生在w3c事件模型中的事件,首是进入捕获阶段,直到达到目标元素,再进入冒泡阶段,如下图所示:

               | |  / \
---------------| |--| |------------
| click1       | |  | |           |
|   -----------| |--| |------     |
|   |click2    \ /  | |     |     |
|   -------------------------     |
|      W3C event model            |
-----------------------------------

4)阻止冒泡,很多时候是不想触发父级的相同事件的,那么就需要阻止这种行为。

W3C方:event.stopPropagation()。(chrome、firefox、safrai等)

IE方:event.cancelBubble设置为true。

经过我的在线测试,stopPropagation这个方法不能阻止捕获。

这里顺带说下阻止默认事件的方法,何为默认事件?就比如a标签设置了href,就会做跳转,这里阻止它跳转。

W3C方:event.preventDefault(),但只有event的cancelable属性为true时才能使用。

IE方:event.returnValue设置为false。

 

二、事件系统

浏览器提供了3种层次的API。

1)最原始的是写在元素标签内

2)以el.onXXX=function绑定的方式,通称为DOM0事件系统。

3)一个元素的同一类型事件可以绑定多个回调,通称为DOM2事件系统。

IE与W3C依旧不同,语法如下:

序号  操作与对象 IE方 W3C方

1

绑定事件

el.attachEvent("on"+type, callback) el.addEventListener(type,callback,[useCapture])

2

卸载事件

el.detachEvent("on"+type,callback) el.removeEventListener(type,callback,[useCapture])
3 创建事件 document.createEventObject()

document.createEvent(types) 创建事件

event.initEvent() 初始化事件

4

派发事件

el.fireEvent(type,event) el.dispatchEvent(event)
5 event属性

currentTarget:其事件处理程序当前正处理事件的元素

target:事件的目标

srcElement:等于target,默认目标
6 event方法

returnValue:等于preventDefault()

cancelBubble:设为true等于stopPropagation()

preventDefault():阻止默认行为

stopPropagation():阻止冒泡

7

type

被触发的事件类型,需要“on”前缀 被触发的事件类型

8

事件执行顺序

与添加顺序相反 与添加顺序一致
9

匿名函数

无法移除 无法移除

10

this

window 当前绑定的元素

 

注意第8点,在测试代码中,我绑定了两个相同的“click”事件, 查看在线完整代码

var func1 = function(e) {
  alert(1); //测试执行顺序
};
var func2 = function(e) {
  alert(2);
};
var type = 'click';
bind(ele, type, func1);
bind(ele, type, func2);

在IE中先弹出2,再弹出1。而在chrome中先弹出1,再弹出2。

 

注意上面的第9点和第10点,上面那道题目中要解决的就是这个问题。下面的代码是个片段,查看在线完整代码

var bind = function(ele, type, callback) {
  if (!ele[type + "event"]) {
    ele[type + "event"] = {}; //声明一个空对象,缓存事件
  }
  var name = callback.toString();
  if (!ele[type + "event"][name]) {
    var handler = function(event) {
      //可以做更多event封装操作
      var ev = event || window.event;
      callback.call(ele, ev);
    };
    ele[type + "event"][name] = handler; //做个临时变量
  }

  if (ele.addEventListener) {
    ele.addEventListener(type, handler, false);
  } else if (ele.attachEvent) {
    ele.attachEvent('on' + type, handler);
  }
}
var unbind = function(ele, type, callback) {
  var handler = ele[type + "event"][callback.toString()]; //读取临时变量
  if (ele.removeEventListener) {
    ele.removeEventListener(type, handler);
  } else if (ele.detachEvent) {
    ele.detachEvent('on' + type, handler);
  }
}

上面的代码还比较粗糙,仅仅是用于演示一下。方法有很多,自己可以揣摩。

我看到网上有人直接不用attachEvent,将相应的事件保存在一个数组中,当detachEvent的时候做splice数组的操作。

大家也可以参考下一些成熟的类库,例如jQuery1.8.3版本,2642行的event.add封装,2757行的event.remove封装,3485行的on封装。

也可以参考Dean Wdwards写的addEvent方法,这是Prototype时代早期出现的一个事件系统,jQuery事件系统的源头。

 

参考资料:

http://www.cnblogs.com/observernotes/p/4827956.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io   前端事件系统(一)

http://myweb.jowai.info/javascript-main-points-archive-events/    JavaScript要点归档:事件

http://www.cnblogs.com/hh54188/archive/2012/02/08/2343357.html    生动详细解释javascript的冒泡和捕获

http://www.cnblogs.com/zhenn/archive/2011/02/20/1959018.html    解决attachEvent中this指向问题

 posted on 2015-11-30 09:54 咖啡机(K.F.J) 阅读(...) 评论(...) 编辑 收藏