Tính năng tự động hoàn thành của jQuery-UI không hiển thị tốt, vấn đề z-index


83

Tôi hiện đang triển khai tính năng tự động hoàn thành của giao diện người dùng jQuery trong trang web khách hàng của tôi. Vấn đề là: phần tử mà tự động hoàn thành nằm trong đó, có chỉ số z cao hơn sau đó là chỉ số z của tự động hoàn thành. Tôi đã thử đặt chỉ mục z tự động hoàn thành theo cách thủ công, nhưng tôi có cảm giác rằng giao diện người dùng jQuery đang ghi đè điều này.

Trên thực tế, câu hỏi của tôi là một bản sao của danh sách đề xuất tự động điền sai z-index, làm cách nào để thay đổi? , nhưng vì không có câu trả lời nên tôi đã nghĩ đến việc thử lại.

Mọi sự giúp đỡ đều được hoan nghênh!

Martijn


3
Điều này sẽ giúp bạn? stackoverflow.com/questions/3549860/…
Tim

2
Kể từ khi không có ví dụ mã tôi có thể khuyên bạn nên thiết lập z-index như bạn cố gắng trước và đặt nó vào!important
Igor Dymov

Tôi đang gặp vấn đề tương tự, nhưng lỗi chỉ xuất hiện trong Chrome. Không có giải pháp nào ở đây dường như đang hoạt động. Có ai có thể giúp tôi không?
Nivs

Câu trả lời:


104

Sử dụng z-index!important

.ui-autocomplete { position: absolute; cursor: default;z-index:30 !important;}  

Đã một thời gian kể từ khi tôi đăng câu hỏi này, nhưng tôi lờ mờ nhớ rằng javascript (và do đó jQuery) đã có thể ghi đè các thuộc tính CSS mặc dù chúng được định nghĩa là "! Important".
Martijn

1
+1 bằng cách sử dụng! Important trên biểu định kiểu tùy chỉnh của tôi cũng hoạt động hoàn toàn tốt đối với tôi và là giải pháp tốt hơn nhiều so với việc sử dụng lệnh gọi lại open ().
Alex Fairchild

Tôi đã chấp nhận câu trả lời này có lợi cho chính mình, vì tôi đồng ý rằng giải pháp này tốt hơn nhiều. Mặc dù vậy, tôi vẫn chưa kiểm tra câu trả lời ..
Martijn

Tôi mới làm quen với jQuery và câu trả lời này rất hay. Đã làm cho tôi. Tôi đã gặp sự cố khi tìm .ui-autocomplete ở đâu, nhưng cuối cùng tìm thấy nó trong jquery-ui.css đã cung cấp cho nó chỉ mục z và viola nó hoạt động!
atsurti

Câu trả lời chính xác. Cũng đã làm việc với tôi. Chỉ để thêm một vài mẩu tin nhỏ. Đầu tiên, dữ liệu tự động hoàn thành được chứa trong một lớp được gọi là ui-autocomplete, sau đó có thể được tạo kiểu trong css của bạn như trên. Thứ hai, nếu bạn đang sử dụng tính năng tự động hoàn thành với Bootstrap, một menu luôn ở trên cùng có chỉ số z là 1030, vì vậy bạn sẽ cần phải thực hiện điều này 1031. Tuyệt vời. Cám ơn.
Randy Greencorn

60

Trong khi tìm kiếm, tôi đã tìm thấy chủ đề này (http://forum.jquery.com/topic/alternating-style-on-autocomplete). Rõ ràng cách duy nhất để thay đổi kiểu của hộp tự động hoàn thành là thực hiện nó thông qua javascript:

    open: function(){
        $(this).autocomplete('widget').css('z-index', 100);
        return false;
    },

2
Tại sao bạn trả lại sai?
Noyo

Mô hình chung trong trình xử lý sự kiện là trả về false sẽ ngăn sự kiện nổi lên. Mặc dù sau bốn năm, tôi không có ý tưởng cho dù đó là thực sự cần thiết trong tình huống này ..
Martijn

2
Cảm ơn vì phản hồi, ngay cả khi nó là nhiều năm sau! Thật vậy, điều này là không cần thiết trong trường hợp của bạn và thậm chí có thể gây ra hành vi không mong muốn ở những người khác .. Trong mọi trường hợp, sự cố này hiện có một giải pháp tiêu chuẩn ( tùy chọn ui-frontlớp + appendTotiện ích): api.jqueryui.com/theming/stacking-elements
Noyo

10

Thay đổi chỉ số z của Div mẹ, menu tự động hoàn thành sẽ có chỉ số z của div + 1


1
Autocomplete sẽ được thêm vào cuối nội dung của cơ thể, vì vậy nó sau đó sẽ có bodys z-index + 1
Marius

8
@Marius, bạn có thể sử dụng appendTotùy chọn để cho đánh dấu menu đi đâu, nếu không, bạn có thể thêm lớp ui-frontvào một trong các phần tử mẹ của đầu vào.
Noyo

1
Một điều nữa: Các div cha mẹ phải sử dụng định vị tương đối ( 'position: relative') khác jQuery sẽ không thể để xác định z-index của nó (xem bugs.jqueryui.com/ticket/5489 )
Felix Schwarz

9

Trong CSS của jQuery UI:

.ui-front { z-index: 9999; }

1
Chào mừng bạn đến với StackOverFlow.com, đây phải là một nhận xét hoặc một câu trả lời phức tạp hơn.
Diego C Nascimento

đó là sai, khi ui jquery cần bật lên một cái gì đó mới, nó chỉ cần lấy chỉ số z trước đó và tăng nó lên 1, sử dụng 9999 làm cho nó chỉ hoạt động một lần, phần tử ui tiếp theo sẽ có chỉ số z là 10.000 lại gây ra sự cố.
Andrea Mauro

8

Hãy thử điều này, bạn có thể thao tác z-index trong thời gian chạy hoặc khởi tạo

$('#autocomplete').autocomplete({
    open: function(){
        setTimeout(function () {
            $('.ui-autocomplete').css('z-index', 99999999999999);
        }, 0);
    }
});

2

Nếu bạn có thể thực thi chỉ số z cao hơn khi nhập văn bản tự động hoàn thành thì đây là giải pháp cho vấn đề của bạn.

jQuery UI Autocomplete danh sách tùy chọn tính toán giá trị z-index của nó bằng cách lấy z-index của đầu vào văn bản mà nó đang được đính kèm và thêm 1 vào giá trị đó.

Vì vậy, bạn có thể cung cấp chỉ số z là 999 cho đầu vào văn bản, tính năng tự động hoàn thành sẽ có giá trị chỉ số z là 1000

Lấy từ http://bugs.jqueryui.com/ticket/5489

<input type="text" class="autocomplete" style="z-index:999;" name="foo">


0

cũng có thể xem bạn đang gắn món đồ vào đâu. tôi đã gặp sự cố này khi tôi nối tự động hoàn thành vào một div bên trong, nhưng khi tôi thêm tự động hoàn thành vào thẻ body, sự cố đã biến mất.



-1

Hãy thử ngay trong css của bạn (trước khi tải tập lệnh), không phải trong firebug:

.ui-selectmenu-menu {
    z-index:100;
}

Trong trường hợp của tôi, điều này hoạt động và tạo ra các chỉ mục z như: 100x (ví dụ: 1002)


1
Vì một số lý do, việc đặt z-index thông qua CSS không hoạt động. jQuery chỉ cần gán giá trị z-index của chính nó. Đã tìm ra giải pháp (xem câu trả lời bên dưới)
Martijn

-1

thêm những điều sau

.ui-autocomplete
{
    z-index:100 !important;
}

trong tệp jquery-custom-ui.css (hoặc tệp được rút gọn nếu bạn đang sử dụng).


-1

Đối với những nhà phát triển vẫn sử dụng plugin này. Thử đi:

.acResults
{
    z-index:1;
}

Đối với tôi là đủ với z-index: 1, hãy đặt giá trị bạn cần trong trường hợp của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.