由一个小Bug推及ie及ff的dom元素差异

如何获取DOM中当前获取焦点的元素

  由于底层库的数据传递的做法,是当Input、TextArea这样的输入库失去焦点时候更新数据到Data对象。

于是产生了这样一个bug。当用户输入一些内容,然后点击DataInput组件的时间选择框时,前面的Input并没有失去焦点。

 

所以为了解决这个bug,理所当然想到把焦点放到DataInput组件上,

$("#DateInput").focus();

可是却没有生效。(生效与否看字体是否变红)

于是改成将焦点取消。$(document.activeElement).blur(),成功。

可是ff下却没有document.activeElement这个对象。

 最终使用:
if($.browser.msie)
  $(document.activeElement).blur();
 else 
  $( e ? e.explicitOriginalTarget : null).blur();
获取document上得到焦点的元素。

 

FF及IE的DOM属性差异问题是一个前端工程师必须解决的事情。

我只是列举一些工作中遇到的,存在这里。

 

事件对象

e = e || window.event;

阻止事件冒泡

IE:
e.returnValue = false;
FF:
if(e.preventDefault)
    e.preventDefault();

获取焦点的的elemet

var elem = e.srcElement || e.currentTarget

绑定事件

function bind(el, type, fn, useCapture){
    if (window.addEventListener) {
        el.addEventListener(type, function(){
            fn.apply(el, arguments);//始终将this指向DOM
        }, useCapture);
    }
    else if (window.attachEvent) {
        el.attachEvent('on' + type, function(){
            fn.apply(el, arguments);//始终将this指向DOM
        });
    }
}

 

posted @ 2012-12-21 10:39  Bug罗  阅读(435)  评论(0编辑  收藏  举报