2011-12-09 81 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的小部件:可見')長度爲0,如果ESC (如果按下其他鍵並且下拉打開,則爲1)。 它看起來像導致Esc導致自動完成的默認行爲首先wthis關閉下拉。 只有在這之後,我的處理程序纔會執行,並且沒有發現執行下拉菜單。

這是怎麼解決的?

回答

0

Andru的評論是正確的。如果您在自動完成關閉後取消事件推測,則會壓制ESC

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

我不明白這個答案。這會阻止自動填充下拉式關閉。我應該在'keydown.formEvent'方法中手動添加關閉自動完成嗎?哪些代碼應該用於關閉下拉菜單? – 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鍵處理程序關閉下拉菜單或強制autocomple關閉下拉式的鍵控,而不是一些其他的想法? – Andrus