2

oncontextmenu ASP.NET アプリで関数をセルにアタッチします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 では正常に動作しますが、Firefox ではwindow.event.returnValue = false; 実行されません。Firefox がこの戻り値をどのように処理するかを調べたe.preventDefault();ところ、window.event の insdead を呼び出す必要があることがわかりました。問題は、私の関数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; で使用しましたcurrentEventASPxClientUtils.PreventEventAndBubble(currentEvent);

乾杯

于 2012-04-04T15:08:16.793 に答える