2

我在我的 ASP.NET 应用程序中将oncontextmenu 一个函数附加到一个单元格string.Format("OnCellContextMenu({0}, '{1}', true, true)", e.VisibleIndex, e.DataColumn.FieldName)

在我的 JS 中,我定义了以下函数。

function OnCellContextMenu(visibleIndex, fieldName, hasNote, hasValue) {
    currentVisibleIndex = visibleIndex;
    currentFieldName = fieldName;

    if (fieldName == "Name" || fieldName == "TOTAL") {
        EnableMenuItem('AddNote', false);
        EnableMenuItem('EditNote', false);
        EnableMenuItem('RemoveNote', false);
    }
    else {
        EnableMenuItem('AddNote', !hasNote && hasValue);
        EnableMenuItem('EditNote', hasNote);
        EnableMenuItem('RemoveNote', hasNote);
    }

    window.event.returnValue = false;

    gvPrevisions.SetFocusedRowIndex(visibleIndex);
    GridMenu.ShowAtPos(ASPxClientUtils.GetEventX(event), ASPxClientUtils.GetEventY(event));
}

现在,在 IE 上可以正常工作,但在 Firefoxwindow.event.returnValue = false; 上没有执行。我四处搜索,看看 Firefox 是如何处理这个返回值的,我知道我应该调用e.preventDefault();insdead 的 window.event。问题是在我的函数e中是未定义的。

你能帮我找到一个适用于 FF 和 IE 的解决方案吗?

谢谢

4

2 回答 2

1

您可以重构代码以使用 jQuery,它适用于所有浏览器,例如:

$('body').bind('contextmenu', function(e) {
    //Stop browser from opening context menu
    e.preventDefault();
    //Do more stuff
});
于 2012-04-04T12:57:16.363 回答
0

我找到了出去的路。

我以这种方式声明了一个函数:

function OnCellContextMenu(e, visibleIndex, fieldName, hasNote, hasValue)

和这样的关联:

e.Cell.Attributes.Add("oncontextmenu", string.Format("OnCellContextMenu(event, {0}, '{1}', true, true)", e.VisibleIndex, e.DataColumn.FieldName));

然后在我得到var currentEvent = (window.event) ? window.event : e;currentEvent在其他函数调用中使用的函数中ASPxClientUtils.PreventEventAndBubble(currentEvent);

干杯

于 2012-04-04T15:08:16.793 回答