各位,我最近在做一个项目中有这样一个需求
页面上是一个GridView,右键点击条目会在鼠标位置弹出一个菜单。我发现如果页面太长或者太宽出现滚动条后,右键菜单的位置不正确,好像是没有把滚动条的属性计算在里面,不知道用什么方法把当前页面的滚动条的Left,Top等属性添加进去,请各位帮忙,我用的右键脚本如下
function displayMenu(rid) {
var menu1 = document.getElementById("menu1");
   whichDiv=event.srcElement;
   menu1.style.leftPos+=10;
   menu1.style.posLeft=event.clientX ;
   menu1.style.posTop=event.clientY ;
   menu1.style.display="";
   var hid = $("hidRecordIdForMenu");
   if (hid != null)
   {
    hid.value = rid;
   }
   //menu1.setCapture();
}

解决方案 »

  1.   

    得计算坐标,可以参照这个改
    <script language="javascript">
    <!--
    function show()
    {
        if(event.button==2)
        {
            window.status=event.clientX+" : "+event.clientY+" "+document.body.clientWidth+" : "+document.body.clientHeight;
            if(document.all)
            {
                div1.style.display="block";
                var lf=document.body.clientWidth-event.clientX;
                var tp=document.body.clientHeight-event.clientY;
                
                if (lf < div1.offsetWidth)
                    div1.style.left = document.body.scrollLeft + event.clientX - div1.offsetWidth;
                else
                    div1.style.left = document.body.scrollLeft + event.clientX;
                if (tp < div1.offsetHeight)
                    div1.style.top = document.body.scrollTop + event.clientY - div1.offsetHeight;
                else
                    div1.style.top = document.body.scrollTop + event.clientY;
            }
        }
    }
    document.onmousedown=show;
    document.oncontextmenu=function(){return false};
    //-->
    </script>
      

  2.   

    To wxg22526451 :
    这段脚本在我页面上好像也没有什么作用
    我页面上是一个列数比较多的DataGrid,超过了页面的宽度,所以浏览器有滚动条,当我把滚动条拉到右面,
    去查看DataGrid最后几列,在单元格中右键点击时,弹出的菜单的位置没有把滚动条的坐标考虑在内,此时如果将滚动条向左拉到开头就会发现,弹出菜单出现在鼠标点击的位置。
    我在页面上试过document.body.scrollLeft 都是0,不知道为什么
      

  3.   

    function displayMenu(rid) { 
    var menu1 = document.getElementById("menu1"); 
      whichDiv=event.srcElement; 
      menu1.style.leftPos+=10; 
      menu1.style.left=parseInt(event.clientX)+document.documentElement.scrollLeft+"px";//加上单位是为了浏览器兼容. 
      menu1.style.top=parseInt(event.clientY)+document.documentElement.scrollTop+"px"; 
      menu1.style.display=""; 
      var hid = $("hidRecordIdForMenu"); 
      if (hid != null) 
      { 
        hid.value = rid; 
      } 
      //menu1.setCapture(); 
    }如果你的页面顶部有
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    就用document.documentElement.scrollTop来获取卷去的高度.