2

我对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" }).显示(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>
4

2 回答 2

1

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

假设您有四个<tr>元素,每个元素的高度为 50 像素。第一行的顶部偏移量为 400 像素,您可以在它的正下方右击。将pageY是 425,顶部偏移量将是 400,所以新的顶部值为 25。

现在您将光标向下移动 100 像素,因此您位于第三行的一半。您右键单击该行。现在pageY是 525,顶部偏移量现在是 500,但新的顶部值仍然是 25。

于 2013-09-11T10:34:24.060 回答
0

是的,您希望将菜单定位在TR 位置鼠标位置——而不是它们之间的差异,这将是近似恒定的。

鼠标(事件)位置通常是最好的,用于右键单击。稍微往下和右边走:

var menu = $(this).find('.right-click');
menu.css({"top": (e.pageY+10)+"px", "left": (e.pageX+10)+"px"});
menu.show(0);
于 2013-09-11T10:48:15.377 回答