2011-12-09 39 views
6

biểu mẫu jQgrid chứa một số hộp tự động hoàn thành jQueryUI.cách kiểm tra xem hộp thả xuống tự động hoàn thành jqueryUI đã mở chưa

Trong trình xử lý sự kiện nhấn phím Esc, chỉ cần xử lý nhấn phím nếu hộp thả xuống tự động hoàn tất không mở. Nếu trình đơn thả xuống tự động hoàn tất được mở, Esc nhấn shoult sẽ thực hiện hành động mặc định của nó chỉ (đóng menu thả xuống và hủy lựa chọn).

Cách kiểm tra xem trình đơn thả xuống tự động hoàn tất đã được mở chưa? Nó có thể kiểm tra cho bất kỳ hộp tự động hoàn thành đã được mở trong cơ thể tài liệu.

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; 
        } 
       }); 
     } 
    }); 

Cập nhật

tôi đã cố gắng TS Molle câu trả lời bằng

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; 

nhưng $. ('Ui-autocomplete.ui-phụ tùng:. Có thể nhìn thấy') chiều dài là 0 nếu esc được nhấn (nó là 1 nếu phím khác được nhấn và thả xuống được mở). Dường như việc gây ra Esc gây ra hành vi mặc định tự động hoàn tất trước tiên wthis đóng menu thả xuống. Chỉ sau khi xử lý của tôi là thực thi mà không thấy rằng thả xuống được thực hiện.

Cách khắc phục sự cố này?

Trả lời

0

Andru là phải vào. Nếu bạn hủy tính năng propegation của sự kiện sau khi tự động hoàn tất, nó sẽ đẩy ESC

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

Tôi không hiểu câu trả lời này. Thao tác này sẽ chặn đóng menu thả xuống tự động hoàn tất. Tôi có nên sử dụng tính năng thêm tự động hoàn tất này theo cách thủ công trong phương thức 'keydown.formEvent' không? Bạn nên sử dụng mã nào để đóng menu thả xuống? – Andrus

13

Sử dụng:

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

..to kiểm tra một autocomplete cụ thể.

Để kiểm tra nếu có thả xuống mở cửa sử dụng: Cảm nhận

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

Cảm ơn bạn. Trong trình đơn thả xuống của phương thức keydown.formevent đã được đóng và độ dài là 0 luôn, do đó, kiểm tra này không tìm thấy trình đơn thả xuống đã được mở. Tôi đã cập nhật câu hỏi. làm thế nào để sửa lỗi này? – Andrus

+1

Câu hỏi được cập nhật có vẻ như đủ để tìm danh sách thả xuống đã mở cuối cùng? Nếu có, có một sự kiện mở để tự động hoàn thành. Tất cả bạn phải làm ist để lưu trữ tự động hoàn thành/thả xuống đang hoạt động trong một biến khi sự kiện mở cháy. –

+0

Có vẻ như không. Chúng ta cần biết là danh sách thả xuống có mở hay không nếu Esc được nhấn. Có thể nó có thể dừng việc truyền chìa khóa esc nếu phím esc được xử lý bởi tự động hoàn thành? Hoặc là nó có thể bắt phím esc báo chí trước đó, trước khi thả xuống được đóng bởi handler esc tự động hoàn thành hoặc lực autocomple để đóng thả xuống trong keyup thay vào đó hoặc một số ý tưởng khác? – Andrus

Các vấn đề liên quan