2011-12-22 33 views
6

Tôi có 4 hộp văn bản tự động hoàn thành jQuery. Tôi cần thêm một số kiểu vào một danh sách tự động điền cụ thể.Tự động hoàn thành giao diện người dùng jQuery: Tham chiếu đến ul

Dấu ul được thêm vào phần thân với lớp ui-autocomplete. Không có liên kết nào có thể cho biết ul nào thuộc về hộp văn bản nào.

Vì vậy, tôi cần phải thêm phong cách cho giao diện người dùng sau khi thành công Ajax hoặc một số tùy chọn mà đi kèm với

$("#srchList").autocomplete(
source: function (request, response) { 
      $.ajax({ ..... 
         success: function (d) { 
         }, 
        ...... 
       }); 
      }, 
open: .... 
select : ..... 
).data('autocomplete')._renderItem = function (liObj, item) { 
    //Position the Autocomplete dropdown. This is not working !!! 
    //$(liObj).parent().css({ 'margin-left': '-18px' }); 

    //Style the dropdown Item. (this works. the li is returned as string to jQuery UI and is added by the jQuery UI to the ul) 
    return $("<li class='dropItem'></li>") 
      .data("item.autocomplete", item) 
      .append($("<a></a>").html(item.label)) 
      .appendTo(liObj); 
}; 

Có một số tùy chọn như mở:, vị trí phía: vv Nhưng không ai trong số họ có được ul -control cho tôi để áp dụng phong cách css trên nó.

Vui lòng giúp tôi lấy tham chiếu đến ul cho một hộp văn bản cụ thể.

DOM Cấu trúc: Các textbox là ở đâu đó bên trong <form>

enter image description here

Cảm ơn trước.

Trả lời

8

"các ul được bổ sung vào cơ thể bằng jquery UI. Chúng tôi không thể kiểm soát cấu trúc DOM như là nơi mà các ul được thêm vào. Cập nhật một hình ảnh về cách DOM của tôi là ... - Raghav 5 phút trước "- bạn thực sự có thể ảnh hưởng đến nơi giữ chỗ được chèn bởi Jqueryui:

Sử dụng tùy chọn "appendTo" khi bắt đầu tự động hoàn thành. Có hai div trống, một trong đó các uls "chuẩn" sẽ được thêm vào, một nơi bạn có kiểu ul đặc biệt.

$(".the-standards").autocomplete({ appendTo: "#someStandardDiv" }); 
$(".your-special-autocomplete").autocomplete({ appendTo: "#someSpecialDiv" }); 

và sau đó trong css của bạn, bạn có thể trước khi chỉ định fancyness như

#someSpecialDiv .ui-autocomplete { border: 1px solid red !important }; 

truy cập danh sách đặc biệt của bạn từ jQuery bởi:

$('#someSpecialDiv .ui-autocomplete').css('border', '1px solid red'); 
+0

luôn luôn kiểm tra các "tùy chọn", "sự kiện" và "phương pháp" tab trên các trang ví dụ jqueryui - có những thứ ngon ngọt. vui mừng khi đã giúp,) – kontur

1

sao tôi hy vọng tôi đã nhận bạn bây giờ, vì vậy bạn muốn từ bỏ phong cách để mỗi phần tử trong danh sách autocomplete sử dụng dataFilter hoặc formatItem

$("#srchList").autocomplete(
source: function (request, response) { 
    $.ajax({ ..... 
     dataFilter: function(data) { return "<span style='.....'>"+data+"</span>"; }, 
     // or 
     formatItem: function(data) { return "<span style='.....'>"+data+"</span>"; }, 
     //something like this, you can change it as per your requirement. 
     success: function (d) { 
         }, 
        ...... 
       }); 
      }, 
open: .... 
select : ..... 
); 
+0

không. tôi cần phải thêm một cái bóng vào toàn bộ hộp và loại bỏ các góc tròn từ nó. cho mỗi mục, tôi tìm thấy cách .. cập nhật mã ... các mục được thêm vào ul từ jquery UI. vì vậy tôi không thể truy cập vào phụ huynh của các mục .. – Raghav

9

Bạn có thể thêm lớp CSS cho rằng ul có lớp 'ui-autocomplete' bằng cách sử dụng:

$(elem).autocomplete({ 
    source: ... 
}).autocomplete("widget").addClass("whatever"); 

Lớp 'bất cứ điều gì' được áp dụng cho ul. xem dưới đây img: Class 'whatever' get applied to ul. see below img:

+1

Thậm chí tốt hơn, chỉ cần làm '$(). autocomplete (" widget ")' nhận được UL trong câu hỏi, và sau đó CSS ​​có thể được sửa đổi cho chỉ nó. – MrDanA

-1
$("#srchList").autocomplete({ 
    source: ... 
}).autocomplete("widget").addClass("your_custom_class"); 
+1

Vui lòng cung cấp giải thích một chút về cách câu trả lời cho câu hỏi – Huangism

+0

[http: // lỗi.jqueryui.com/ticket/8928](http://bugs.jqueryui.com/ticket/8928) – Ramesh

+0

Điều này không thêm một lớp vào UL được tạo ra khi OP được hỏi. Điều này sẽ nối thêm lớp vào đầu vào thực tế tính năng Tự động điền đang được tạo. – pimbrouwers

0
select: function(event, ui) { 
    // that's how get the menu reference: 
    var widget = $(this).data('ui-autocomplete'), 
    menu = widget.menu, 
    $ul = menu.element, 
    id  = $ul.attr('id'); // or $ul[0].id 
} 
Các vấn đề liên quan