jQuery offset()没有按预期工作

时间:2013-09-11 09:46:08

标签: jquery html css jquery-ui

我是stackoverflow的新手,请原谅我有关代码格式的问题。 我的问题是我创建了一个自定义的右键菜单,它将显示在'tr'上。所有'tr'都是动态生成的,每次右键单击ul都与每个tr相关联,以实现不同的功能。 offset()有问题,每当我右键单击任何一个tr我只得到相对于第一个tr的菜单位置。但正如我之前所说,右键菜单是不同的。请帮忙。
    

$('.cuz-menu').bind("contextmenu", function (e) {
    e.preventDefault();
    var posX = $(this).offset().left, posY = $(this).offset().top;
    $(this).find('.right-click').css({ "top": e.pageY - posY + "px", "left": e.pageX - posX -        85 + "px" }).show(0);
    

<tr class='right-content cuz-menu'>
         <td class="status ends-margin">
               <ul id=\"right-click\" class=\"right-click\">
                  <li>Diagram</li>
                  <li>Terminate</li>
                  <li>View Log</li>
               </ul>    
    <td class='rootProcess templates end-date'></td>
</tr>

2 个答案:

答案 0 :(得分:1)

问题似乎与您对新的顶部和左侧值的计算有关;每个pageY元素的offset().top<tr>之间的差异将相同。

假设您有四个<tr>元素,每个元素的高度为50像素。第一行的顶部偏移量为400像素,您可以在其中间正确地单击鼠标右键。 pageY将为425,最高偏移量为400,因此新的最高值为25。

现在您将光标向下移动100个像素,这样您就可以在第三行中间移动一半。您右键单击此行。 pageY现在是525,顶部偏移现在是500,但新的最高值仍然是25。

答案 1 :(得分:0)

是的,您希望将菜单定位在 TR位置鼠标位置 - 而不是它们之间的差异,这将大致保持不变。

鼠标(事件)位置通常最好,右键单击。略低于&amp;右:

var menu = $(this).find('.right-click');
menu.css({"top": (e.pageY+10)+"px", "left": (e.pageX+10)+"px"});
menu.show(0);