グリッドでsearchOnEnter: trueを宣言すると、グリッドで検索中に Enter キーを使用できるようになります。それにもかかわらず、Enter キーを押して検索を行うと、グリッドはまったくフィルタリングされません。ただし、同じアクションを 2 回繰り返すと、フィルターは 2 回目に機能します。なぜこれが起こっているのか分かりません。検索テキストを明確に入力しても、最初は空の文字列を送信している可能性があると考えられますが、これもわかりません。どんな助けでも大歓迎です。
-アダム
グリッドでsearchOnEnter: trueを宣言すると、グリッドで検索中に Enter キーを使用できるようになります。それにもかかわらず、Enter キーを押して検索を行うと、グリッドはまったくフィルタリングされません。ただし、同じアクションを 2 回繰り返すと、フィルターは 2 回目に機能します。なぜこれが起こっているのか分かりません。検索テキストを明確に入力しても、最初は空の文字列を送信している可能性があると考えられますが、これもわかりません。どんな助けでも大歓迎です。
-アダム
この問題を解決するには、jqGrid のソース コードにパッチを適用する必要があります。keydown イベント (検索ダイアログで Enter ボタンを押したときに実行される関数) のハンドラーを見つける必要があります。このコードは、ソース ファイルで「searchOnEnter」を検索すると見つかります。右のフラグメントは次のようになります。
if (p.searchOnEnter || p.closeOnEscape) {
$("#"+$.jgrid.jqID(IDs.themodal)).keydown(function (e) {
var $target = $(e.target);
if (p.searchOnEnter && e.which === 13 && // 13 === $.ui.keyCode.ENTER
!$target.hasClass('add-group') && !$target.hasClass('add-rule') &&
!$target.hasClass('delete-group') && !$target.hasClass('delete-rule') &&
(!$target.hasClass("fm-button") || !$target.is("[id$=_query]"))) {
ここで、コード行$("#"+fid+"_search").focus().click();
を次の 2 つに分割する必要があります。
$("#"+fid+"_search").focus();
setTimeout(function(){
$("#"+fid+"_search").click();
},0);
元のコードで終わる:
return false;
}
(こちらもご覧ください)