2011-12-10 16 views
2

Custom values to Context Menu Items in JQgridを使用してテキストメニューのインライン編集を使用してjqGridにコンテキストメニューを追加すると、テキストボックス標準のコンテキストメニューが使用できなくなり、jqGridコンテキストメニューに置き換えられます。標準のテキストボックスコマンドをjqgridコンテキストメニューに追加する方法

jqGridのコンテキストメニューに標準のテキストボックスコンテキストメニューコマンド(取り消し、切り取り、コピー、貼り付け、削除、すべて選択)を追加する方法、またはテキストボックスインライン編集の標準コンテキストメニューを表示する方法は?

更新

インライン編集では、標準のメニューは黄色の背景やオートコンプリートボックス内で右クリックして開かれ、その標準的なブラウザのコンテキストメニューが開かれた後、カスタムメニューが閉じていない場合は、2つのメニューが表示されます。この問題を解決する方法

two menus

答えて

2

「コピー」、「貼り付け」などのコンテキストメニューコマンドで実装するのは簡単ではありません。前の質問でデモをthe answerから変更することにしました。 the new demoでは、ページに選択されたテキストがない場合にのみコンテキストメニューが表示されます。

最初の問題はjquery.contextmenu.jsの元のコードは、次のコードが含まれていることである。

$(this).bind('contextmenu', function(e) { 
    // Check if onContextMenu() defined 
    var bShowContext = (!!hash[index].onContextMenu) ? hash[index].onContextMenu(e) : true; 
    if (bShowContext) display(index, this, e, options); 
    return false; 
}); 

のでcontextmenuハンドラは常にfalseを返すと、標準のコンテキストメニューの作成を防止。私は(あなたが完全な変更されたコードhereをダウンロードすることができます)、次のコードを修正:

$(this).bind('contextmenu', function(e) { 
    // Check if onContextMenu() defined 
    var bShowContext = (!!hash[index].onContextMenu) ? hash[index].onContextMenu(e) : true; 
    currentTarget = e.target; 
    if (bShowContext) { 
    display(index, this, e, options); 
    return false; 
    } 
}); 

createContexMenuFromNavigatorButtons機能のコードがhereを説明し、私はgetSelectedText()を使用するようにして唯一のコンテキストメニューを作成するために

onContextMenu: function (e) { 
    var rowId = $(e.target).closest("tr.jqgrow").attr("id"), p = grid[0].p, i, 
     lastSelId; 

    if (rowId && getSelectedText() === '') { 
     ... 
     return true; 
    } else { 
     return false; // no contex menu 
    } 
} 

を修正しましたテキストが選択されていない場合その結果、あなたはテキストが選択されていない場合にのみ、カスタムコンテキストメニューが表示され、テキストの選択が存在する場合(Webブラウザに依存)標準のコンテキストメニューが表示されます。更新

enter image description here

を:I私のバグレポートjquery.contextmenu.jsadditional informationと修正しました。この変更は、pluginsサブディレクトリに含まれるjquery.contextmenu.jsのメインコードにすぐに反映されることを願っています。

UPDATED 2:あなたはhereすべての修正がgithub上のjqGridのメインコードでとjqGrid 4.3に含まに既にある見ることができますどのように。 3を更新し

:あなたはすべてののための標準的なコンテキストメニューを持っているしたい場合は、あなただけonContextMenuコールバックの内部コードを少し変更する必要があり<input type="text" ...><input type="textarea" ...><textarea ...>要素を可能にしました。例えば

onContextMenu: function (e) { 
    var p = grid[0].p, i, lastSelId, 
     $target = $(e.target), 
     rowId = $target.closest("tr.jqgrow").attr("id"), 
     isInput = $target.is(':text:enabled') || 
     $target.is('input[type=textarea]:enabled') || 
     $target.is('textarea:enabled'); 
    if (rowId && !isInput && getSelectedText() === '') { 
     ... 

はインライン編集をダブルクリックによってアクティブにされる1以上demoを参照してください。

+0

ありがとうございます。テキストが選択されていない場合は、すべてのコマンドを貼り付けて選択することができます。あなたが作成したカスタムメニューに標準的なテキストボックスのコンテキストメニューを追加するには?この場合、両方のコマンドを使用できます。 – Andrus

+0

@Andrus:私はそれが不可能だと思います。 – Oleg

+0

http://stackoverflow.com/questions/400212/how-to-copy-to-clipboard-in-javascriptなどのソリューションを使用することは可能でしょうか? – Andrus

関連する問題