Firefox和IE9中的Javascript事件

Javascript events in Firefox and IE9

本文关键字:Javascript 事件 中的 IE9 Firefox      更新时间:2023-09-26

我在ASP.NET应用程序中附加到单元格oncontextmenu函数CCD_ 2。

在我的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上运行正常,但在Firefox window.event.returnValue = false;上则不执行。我在谷歌上搜索了一下Firefox是如何处理这个返回值的,我发现我应该在window.event的死后调用e.preventDefault();。问题是在我的函数中e是未定义的。

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

感谢

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

$('body').bind('contextmenu', function(e) {
    //Stop browser from opening context menu
    e.preventDefault();
    //Do more stuff
});

我找到了出路。

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

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;并在ASPxClientUtils.PreventEventAndBubble(currentEvent); 等其他函数调用中使用currentEvent

干杯