在同一个页面里同时加载了onmousedown 事件 和 onclick 单击事件, 如何能解决 onclick 事件,被onmousedown 事件给 覆盖了,只能使用优先的 onmousedown 单击事件不知,有没有办法解决这个问题? 谢谢

解决方案 »

  1.   

    为什么要用onmousedown?还检测按下时间?如果这样的话最好独立做个控制,原来的click事件用onmousedown和onmouseup来检测后触发
      

  2.   

    我用了 onmousedown 拖动 ,表格上还有复选框按钮,onclick 事件的,但是现在点击不了 onclick 而是先点击触发了 onmousedown 事件了
      

  3.   

    嗯,onmousedown 的代码发出来。估计是return false或别的什么代码阻止浏览器默认行为。做个判断,可拖动则阻止,不可拖动就继续。
      

  4.   

    //表格拖动列宽开始function JPos(){ 
         
        JPos.getAbsPos = function(pTarget){ 
            var x_ = y_ = 0; 
             
            if(pTarget.style.position != "absolute"){         
                while(pTarget.offsetParent){ 
                        x_ += pTarget.offsetLeft; 
                        y_ += pTarget.offsetTop; 
                        pTarget = pTarget.offsetParent; 
                } 
            } 
                x_ += pTarget.offsetLeft; 
                y_ += pTarget.offsetTop; 
            return {x:x_,y:y_}; 
        } 
         
        JPos.getEventPos = function(evt){ 
                var _x,_y; 
                evt = JEvent.getEvent(evt); 
                if(evt.pageX || evt.pageY){ 
                    _x = evt.pageX; 
                    _y = evt.pageY; 
                }else if(evt.clientX || evt.clientY){ 
                    _x = evt.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft) - (document.body.clientLeft || document.documentElement.clientLeft); 
                    _y = evt.clientY + (document.body.scrollTop || document.documentElement.scrollTop) - (document.body.clientTop || document.documentElement.clientTop); 
                }else{ 
                    return JPos.getAbsPos(evt.target);     
                } 
                return {x:_x,y:_y};     
        }     
         
    }
    //======================================================================================= 
    function JEvent(){ 
        JEvent.getEvent = function(evt){               
            evt = window.event || evt; 
                         
            if(!evt){ 
                var fun = JEvent.getEvent.caller; 
                while(fun != null){ 
                    evt = fun.arguments[0]; 
                    if(evt && evt.constructor == Event) 
                        break; 
                    fun = fun.caller; 
                } 
            } 
                 
            return evt; 
        } 
         
        JEvent.doEvent = function(fun){ 
            var args = arguments; 
            return function(){ 
                return fun(args); 
            } 
        } 
    }//======================================================================================= 
    function settab () {
    JPos();
    JEvent();
    var colIndex; 
    var dataTable = document.getElementById("tab"); 
    var cols = dataTable.getElementsByTagName("COL"); 
    var dragMask = document.createElement("DIV"); 
    var mAWidth = mAHeight = 300; 
    document.body.insertBefore(dragMask,document.body.lastChild); 
    dragMask.style.cssText = "width:" + mAWidth + "px;height:" + mAHeight + "px;position:absolute;background-color:#fff;filter: Alpha(Opacity=10);-moz-opacity:0;opacity: 0;z-index:999999999;display:none;"; 
    var mask_mousemove = function(evt){ 
        if(document.selection){//IE ,Opera 
            if(document.selection.empty) 
                document.selection.empty();//IE 
            else{//Opera 
                document.selection = null; 
            } 
        }else if(window.getSelection){//FF,Safari 
            window.getSelection().removeAllRanges(); 
        } 
         
        var oPos = JPos.getAbsPos(this); 
        var mPos = JPos.getEventPos(evt); 
         
        var x = mPos.x - oPos.x - mAWidth / 2; 
        var tmpX = parseInt(cols[colIndex].style.width) + x; 
        dragMask.style.left = mPos.x - mAWidth / 2 + "px"; 
        cols[colIndex].style.width = tmpX >= 2 ? tmpX + "px" : "2px"; 
        if(!document.all) 
            dataTable.parentNode.style.width = dataTable.parentNode.clientWidth + x + "px";//这一句为处理FF时用。 

    var mask_mouseup = function(evt){ 
        dragMask.style.display = "none"; 

    dragMask.onmousemove = mask_mousemove; 
    dragMask.onmouseup = mask_mouseup; 
    var cell_mousedown = function(evt){ 
        colIndex = this.colIndex; 
        var mPos = JPos.getEventPos(evt); 
        with(dragMask.style){ 
            left = mPos.x - mAWidth / 2  + "px"; 
            top = mPos.y - mAHeight / 2 + "px"; 
            display = ""; 
        } 
    } var i , o; 
    for(i = 0 ; o = dataTable.rows[0].cells[i] ; i++){ 
        o.colIndex = i; 
       o.onmousedown = cell_mousedown; 
       //o.ondblclick = cell_mousedown; 
     } 
    }
    //列宽拖动函数结束完整的拖js源码在上面了
      

  5.   

    var i , o; 
    for(i = 0 ; o = dataTable.rows[0].cells[i] ; i++){ 
        o.colIndex = i; 
       o.onmousedown = cell_mousedown; 
       //o.ondblclick = cell_mousedown; 
    整个页面上的onclick 事件全被 onmousedown 给替代了,所有的 onclick事件全部失效了
      

  6.   

    嗯,已经不习惯这种写法了,都是封装成类的,所以就给你个思路。
    cell_mousedown 时找个地方存放JPos.getEventPos(evt); 和当前时间,然后mask_mouseup时计算移动距离和抬起时间,小于某个值时就触发click事件。