Javascript 事件viewGridRow的jQGrid中的top和left选项存在问题,无法分析光标位置

Javascript 事件viewGridRow的jQGrid中的top和left选项存在问题,无法分析光标位置,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我的jQGrid有问题。我试图使它在viewGridRow事件触发时,将弹出窗口的位置设置为光标的位置。我在网格中有一个很长的列表,默认情况下会将窗口放在网格的顶部 atm i具有通过jQuery检索光标位置的功能: var CursorX; var CursorY; $(document).bind('dblclick', function (e) { CursorX = e.pageX; }) $(document).bind('dblclick', function (e) { Curso

我的jQGrid有问题。我试图使它在viewGridRow事件触发时,将弹出窗口的位置设置为光标的位置。我在网格中有一个很长的列表,默认情况下会将窗口放在网格的顶部

atm i具有通过jQuery检索光标位置的功能:

var CursorX;
var CursorY;
$(document).bind('dblclick', function (e) { CursorX = e.pageX; })
$(document).bind('dblclick', function (e) { CursorY = e.pageY; })
viewGridRow的配置如下所示:

ondblClickRow: function (rowid) {
    jQuery("#grid").jqGrid('viewGridRow', rowid, {
        top: CursorY,
        left: CursorX,
        modal: true,
        width: 1500,
        caption: "View Item",
        recreateForm: true,
        beforeShowForm: function (form) {
            jQuery("#grid").
            setColProp('last_instruct', { formatter: "unformat" });
        },
    });
},
问题是它似乎不起作用


有人知道我做错了什么吗?

刚刚在我自己的一个网格上进行了测试,如前所述,问题是jQgrid在更新变量之前正在处理ondblClick事件

取消以下约束:

var CursorX;
var CursorY;
$(document).bind('dblclick', function (e) { CursorX = e.pageX; })
$(document).bind('dblclick', function (e) { CursorY = e.pageY; })
然后搬到

    top: e.pageY,
    left: e.pageX,
您还需要将ondblClickRow更新为

ondblClickRow: function (rowid, iRow, iCol, e) {
编辑(以确保jQgrid每次都重新创建一个新的视图/编辑等窗口。 Ex(每次重新创建一个新的编辑表单)


作为旁注,您可能需要考虑当用户双击一个区域时会发生什么情况,该区域将生成一个超出正常查看区域的表单。

我看到
var CursorX;
两次。
CursorY
不存在。如果您手动设置top:,left:的值,它们是否可以定位网格?另外,您确定吗设置了r变量?JQgrid是否覆盖/禁用了您设置CursorX/Y值的事件。@标记手动设置值时,它可以工作,我通过
alert()
检查了值,结果很好。您通过警报检查的值在
ondblClickRow:函数(rowid)中
?这很公平,但atm is说e是未定义的。我知道我必须以某种方式定义事件,但我不知道如何定义。如果能提供更多帮助,我们将不胜感激:)请参阅我在ondblClickRow中定义e的编辑:函数调用修复了问题,但仅在第一个选项上,之后,每单击一项,表单就会在初始生成点显示。现在尝试调试它,如果我修复了它,我会发布+1为了更接近答案tho:)我想你可能需要考虑添加类似于上面编辑的内容,以便每次都重新创建表单。我正在忙于另一项任务,一旦有机会,我将检查解决方案并将其发布在此处。
    $.extend($.jgrid.edit, { closeAfterEdit: true, recreateForm: true });