2012-04-04 2 views
2

私は自分のASP.NETアプリケーションにセルoncontextmenu の機能string.Format("OnCellContextMenu({0}, '{1}', true, true)", e.VisibleIndex, e.DataColumn.FieldName)を添付します。FirefoxとIE9でのJavascriptイベント

私の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上でproperlly動作しますが、Firefoxのwindow.event.returnValue = false; 上では実行されません。私はFirefoxがこの戻り値をどのように扱うのかを知りたかったので、私はe.preventDefault();というwindow.eventのinsdeadを呼び出すべきだと思った。問題は私の関数ではeは未定義です。

FFとIEの両方で動作するソリューションを見つけるのを手伝ってもらえますか?

おかげ

+0

何が起こると思いますか? – Jivings

+0

右クリックして自分自身を表示しているときにブラウザメニューを表示しないようにします。 – MaiOM

+0

これを使用してください。 if(window.event.preventDefault){window.event.preventDefault(); } – Ramesh

答えて

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; を持って、ASPxClientUtils.PreventEventAndBubble(currentEvent);のような他の関数呼び出しを越えcurrentEventを使用

乾杯

1

あなたはすべてのブラウザ例えば渡って作品のjQueryを、使用するようにコードをリファクタリングすることができます

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

いいですが、私はDevxpress GridViewを使っていますが、私はoncontextmenu属性をグリッドセルに特別な方法で設定しています。内部グリッドHtmlDataCell準備されたサーバー側のイベント私は次のことをしています。e.Cell.Attributes.Add( "oncontextmenu"、string.Format( "OnCellContextMenu({0}、 '{1}'、true、true) VisibleIndex、e.DataColumn.FieldName)); – MaiOM

関連する問題