2011-12-09 23 views
6

jQgridフォームにはいくつかのjQueryUIオートコンプリートボックスが含まれています。jqueryUIのオートコンプリートドロップダウンボックスが開いているかどうかを確認する方法

keydownイベントハンドラでEscキーを押す必要があるのは、オートコンプリートドロップダウンボックスが開いていない場合のみです。オートコンプリートドロップダウンが開いている場合は、Escを押してデフォルトのアクションのみを実行します(ドロップダウンを閉じて選択をキャンセルします)。

オートコンプリートドロップダウンが開いているかどうかを確認するにはどうすればよいですか? 文書本体に開かれたオートコンプリートボックスがあるかどうかを確認できます。

jQuery.extend(jQuery.jgrid.edit, { 
    beforeShowForm: function ($form) { 
      var gridIdEncoded = $.jgrid.jqID($form[0].id.substring(8)); 
      $("#editmod" + gridIdEncoded).bind('keydown.formEvent', function (e) { 
       if (e.which === 27) { 
        // Todo: How invoke click only if any autocomplete dropdown is not opened 
        $("#TblGrid_" + gridIdEncoded + "_2 #cData").trigger("click"); 
        return false; 
        } 
       }); 
     } 
    }); 

更新

私は博士モールが

if (e.which === 27) { 
    alert($('.ui-autocomplete.ui-widget:visible').length); 
    if ($('.ui-autocomplete.ui-widget:visible').length != 0) 
    // dropdown is open, allow default behaviour 
    return; 

を使用して答えてみましたが、$( 'UI-autocomplete.uiウィジェット:。目に見える')。長さは、ESC場合は0であります(他のキーが押され、ドロップダウンが開いている場合は1になります)。 Escの原因により、最初にこのドロップダウンを閉じると自動補完のデフォルト動作が発生するようです。 この後、私のハンドラはそのドロップダウンが見つからないexecutudが実行されます。

これをどのように修正しますか?

答えて

0

Andruのコメントは右側にあります。オートコンプリートが終了した後でイベントの予告をキャンセルすると、ESCをスケルチします。

$('.autocomplete').bind('autocompleteclose', function(event, ui) { 
return false; 
}); 
+0

私はこの答えを理解していません。これは、オートコンプリートドロップダウンクロージングをブロックします。 'keydown.formEvent'メソッドでclose autocompleteを手動で追加する必要がありますか?ドロップダウンを閉じるにはどのコードを使用する必要がありますか? – Andrus

13

用途:

!!$($('autocompleteselector').autocomplete('widget')).is(':visible') 

特定のオートコンプリートをチェック..to。

任意のドロップダウンが開いて使用することであるかどうかを確認するには、次の

!!$('.ui-autocomplete.ui-widget:visible').length 
+1

ありがとうございます。 keydown.formeventメソッドでは、ドロップダウンはすでに閉じられており、長さは常に0であるため、このチェックではドロップダウンが開かれたことがわかりません。私は質問を更新しました。これを修正する方法は? – Andrus

+1

更新された質問は、最後に開いたドロップダウンを見つけるのに十分であるかのように聞こえますか?はいの場合、オートコンプリート用のオープンイベントがあります。オープンイベントが発生したときに変数にアクティブなオートコンプリート/ドロップダウンを格納するだけです。 –

+0

いいえのようです。 Escを押すと、ドロップダウンが開いているかどうかを知る必要があります。 escキーがオートコンプリートで処理されている場合、escキーの伝播を止めることは可能でしょうか?ドロップダウンがオートコンプリートescキーハンドラで閉じられる前にescキーを押すか、代わりにキーアップのドロップダウンを閉じたり、オートコンプリートを強制したりすることが可能ですか? – Andrus

関連する問題