我才12 ?

文章关键字 ‘onclick’

onblur与onclick at 2009.9.23 16:04

在最近的新淘江湖项目中遇到一个诡异的问题,就是关于onblur和onclick。当时觉得很诡异,后来测试后发现更诡异。所以在此记录一下。

首先提出问题:如果我为一个input添加了一个blur事件,同时为document添加了一个click事件,那么,当input是焦点状态时,我点击其它地方,会触发哪个事件?如果两个都触发了,那么会先触发哪个事件?

按理来说,这两个事件应该都会发生的,但是,在各浏览器下测试的结果很令人不解!~

大家先看一下Demo,点吧点吧试下~

测试结果表格(不包含点击标签栏或者地址栏以及其它到浏览器外时的情况):

以下测试均在input的focus状态下进行:
浏览器 点击滚动条时是否触发onblur事件? 点击空白处(无任何内容或者点击后也不会出现任何内容的地方),是否先触发onblur事件,后触发onclick事件? 点击有文字的地方,是否触发onclick事件? 点击(点击后点击处将出现文字)的地方,是否触发onclick事件? 点击(点击后将display:none)的地方,是否触发onclick事件? 点击(点击后将visibility:hidden)的地方,是否触发onclick事件? 刷新后是否自动触发blur事件?
IE6 是(获取到的target是body) 是(获取到的target是body)
IE7 是(获取到的target是body) 是(获取到的target是body)
IE8 是(获取到的target是body) 是(获取到的target是body)
Opera 10.10 Beta 1792 是(获取到的target是消失的元素) 是(获取到的target是消失的元素)
Firefox 3.5.3
Chrome 3.0.195.21
Safari 4.0.3(531.9.1)

尺寸原因,这里的表格可能看着不爽,可以点击这里查看美丽版!~

5、6项的测试是为了看下二者是否会有差异,结果二者是一样的,囧。从测试结果来看,对Firefox特别满意,IE的表现很令人失望,Opera和Webkit引擎的浏览器很怪异,这主要体现在第3、5、6项上~

有时候我们需要在页面中动态的创建一些节点,比如 <a> 标签,然后对其添加一下触发的事件,比如下边这个很简单的例子:

function addLoadEvent(func) {
 var oldonload = window.onload;
 if (typeof window.onload != 'function') {
  window.onload = func;
 } else {
  window.onload = function() {
  oldonload();
  func();
  }
 }
}
function create() {
 var bodys = document.getElementsByTagName("body");
 var link = document.createElement("a");
 link.href = "#";
 var text = document.createTextNode("创建一个节点");
 link.appendChild(text);
 link.onclick = function() {
  alert("哈哈");
  return false;
 }
 bodys[0].appendChild(link);
}
addLoadEvent(create);
继续阅读 »

这位姐姐,你好,你的浏览器版本太低了,为了避免您中毒,请您升级您的浏览器!