.infobar {background:#fff9e3;border:1px solid #fadc80;color:#743e04;margin-bottom:10px;padding:8px 20px 4px 20px; font-size:12px;}<div id="PostPanel" style="position:absolute;top:0px;left:0px; width:300px; z-index:999;padding:6px 2px 6px 10px;border:1px solid #fb7;display:none;" class="infobar">
<div style="padding:3px 0 0 0;"><a href="#">房屋出租</a>  <a href="#">房屋求租</a>  <a href="#">商铺出租</a> 
<a href="#">商铺转让</a> <a href="#">其他</a> <a href="javascript:void(0)" onClick="$('PostPanel').style.display = 'none';">关闭</a></div><h4><div id="hpanel"><a href="#">发布租房消息</a></div></h4>function $$(id){return document.getElementById(id);}
document.onclick = function(evt){//在不是连接的位置单击时,隐藏 显示的层
var _target = evt ? evt.target : event.srcElement ;
var _id = _target.id;
if( _id == "" ){
_id = _target.tagName;
}
if( _id !="A"){
$$("PostPanel").style.display = 'none';
}
}
window.onload=function(){//网页载入时,绑定指定对象下的所有a
  var xx=$$("hpanel");
  var xxx = xx.getElementsByTagName("a");
  for(var i=0,j=xxx.length; i<j; i++){
    xxx[i].onclick=function(evt){
      var _event = evt ? evt : window.event;
      var _target = evt ? evt.target : window.event.srcElement;
      var _p = $$("PostPanel");
      _p.style.top = _event.clientY + document.body.scrollTop ;
      _p.style.left = ( _event.clientX + document.body.scrollLeft < 160 ? _event.clientX + document.body.scrollLeft + 10  : _event.clientX  + document.body.scrollLeft - 120 );
      $$("PostPanel").style.display = '';
      return false;
    }
  }
}为什么我点击“发布租房消息”弹出的层第一次在链接附近,滚动屏幕后,弹出的层就跑到屏幕上方了呢?在FF下,层在屏幕左上角。请问怎么样才能使弹出得层能自己自动在点击位置的左右呢?(如果右边到头了就显示在点击位置的左边)

解决方案 »

  1.   

    注意到你的一些结构样式中用到了position,一般用到position,要通过该元素获得事件y值一般要再减去父节点的y值。参见:easyUI.getPosition(domobj)
        取元素坐标,如元素或其上层元素设置position relative,应该getPosition(子元素).y-getPosition(父元素).y
        参数:DOM元素
        返回值:{x:value,y:value}(如果右边到头了就显示在点击位置的左边),这个你就需要通过显示位置x和弹出层的宽度进行比较。
      

  2.   

    我不大懂js阿,我上面的js是抄别人的,谁帮忙改一下?