2012-04-23 9 views
2

データテーブルにバインドするグリッドビューがあります。条件がある行に対してコンテキストを追加したいと思います。今、私はグリッド上でコンテキストメニューを表示するには、このコードを書いグリッドビューの一部の行のコンテキストメニューを表示するには

if (e.Row.Enabled == true && e.Row.Cells[6].Enabled == true) 
     { 
      e.Row.CssClass = "HasMenu"; 
     } 

$(document).ready(function() { 

     $('#menu').click(function() { 
      $('#menu').hide(); 
     }); 
     $(document).click(function() { 
      $('#menu').hide(); 
     }); 


     $("#" + '<%= GridView1.ClientID %>').bind("contextmenu", function (e) { 
      $('#menu').css({ 
       top: e.pageY + 'px', 
       left: e.pageX + 'px' 
      }).show(); 

      return false; 

     }); 
    }); 

問題は、私は任意のコンテキストメニューが表示されないです(コンテキストメニューを探検ない私はRowDataBoundイベントでこのコードを使用します私のカスタムコンテキストメニューではありません)HasMenu cssクラスがなく、HasMenu cssクラスを持つ行のコンテキストメニューを表示します。スクリプトに必要な変更はありますか?あなたは、個々の行にそれを変更する必要があると思い

$("#" + '<%= GridView1.ClientID %>') 

おかげで

答えて

1

今、あなたは全体のGridViewのためcontextmenuイベントを聴いている

$('#" + '<%= GridView1.ClientID %> rowselector.HasMenu') 

しかし、rowselectorはマークアップで行が定義されています。例えば

行が<TR>であれば、行はあなたがいることを

$("#" + '<%= GridView1.ClientID %> > div.HasMenu') 

ノートのようなものを書きたいかもしれない子<DIV>要素であれば、あなたは、そうでない場合

$("#" + '<%= GridView1.ClientID %> tr.HasMenu') 

を記述します2つの平易な文字列を連結すると、javascript変数は必要ありません。あなたにも書ける:

$('#<%= GridView1.ClientID %> rowselector.HasMenu') 
+0

それはIEのコンテキストメニューがない 'HasMenu'クラス – Arian

+0

@Kerezoを持っている行に表示される原因:はい、私はあなたが全体のメニューにリスナーを追加することを最初は気付きませんでした。私の編集を参照してください。 –

+0

ブラウザがIEでRowがHasMenuクラスでない場合、contextmenuハンドラ中にfalseを返します。 – rt2800

関連する問題