Vấn đề z-index bộ chọn ngày jquery


106

Tôi có một div trình chiếu và tôi có một trường datepicker phía trên div đó.

Khi tôi nhấp vào trường datepicker, bảng datepicker hiển thị phía sau div trình chiếu.

Và tôi đã đặt kịch bản là:

http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js

Vì vậy, tôi không thể thay đổi chỉ số z của datepicker trong CSS. Chỉ số z của trình chọn ngày mà tập lệnh đang tạo là 1 và div trình chiếu của tôi (còn gọi là googleajaxapi) z-index là 5. Vì vậy, tôi đoán tôi phải tăng chỉ mục z của trình chọn ngày lớn hơn 5. Vậy có bất kỳ cách nào để tăng nó?

Ai đó có thể giúp tôi?


Câu trả lời:


176

Đặt phong cách sau vào yếu tố văn bản 'đầu vào': position: relative; z-index: 100000;.

Bộ chọn ngày div lấy chỉ số z từ đầu vào, nhưng điều này chỉ hoạt động nếu vị trí là tương đối.

Bằng cách này, bạn không phải sửa đổi bất kỳ javascript nào từ giao diện người dùng jQuery.


8
Vấn đề với điều này là đầu vào của bạn sẽ hiển thị trên các yếu tố khác, điều này hiếm khi hiệu quả mong muốn
Serj Sagan

1
Là nghĩa vụ phải làm việc khi datepicker được ràng buộc với một khoảng thời gian ?
rmoestl

10
position : relativekhông thể chấp nhận được và không hoạt động trong hoàn cảnh của tôi. giải pháp dưới đây hoạt động tốt.
Kiwy

1
điều này không hoạt động trên trình duyệt IE 11. Trình duyệt này có cụ thể không?
Ashwini Maddala

3
Giải pháp này, trong khi nó hoạt động, không phải là hợp lệ cho tất cả các tình huống. Tốt nhất là overide với một dòng duy nhất của CSS '.ui-datepicker {z-index: 9999 quan trọng;!}'
Daniel Tùng

154

đơn giản trong việc sử dụng css của bạn ' .ui-datepicker{ z-index: 9999 !important;}' Tại đây 9999 có thể được thay thế thành bất kỳ giá trị lớp nào bạn muốn có sẵn bộ chọn ngày của mình. Không có bất kỳ mã nào được nhận xét cũng như thêm ' position:relative;' css trên các phần tử đầu vào. Bởi vì việc tăng chỉ số z của các phần tử đầu vào sẽ có hiệu lực trên tất cả các nút loại đầu vào, điều này có thể không cần thiết đối với một số trường hợp.


Tôi đã phải sử dụng datepickerchứ không phải làui-datepicker
M Smith

JavaScript vẫn sử dụng chỉ mục z không liên tục, ngữ cảnh xếp chồng tùy ý và có vấn đề về khả năng tương thích giữa các trình duyệt trong năm 2016? ActionScript 3 FTW (một thập kỷ trước, và vẫn còn cho đến ngày nay).
Triynko


14

Dựa trên câu trả lời markyzm, điều này phù hợp với tôi:

$('input').datepicker({
    beforeShow:function(input) {
        $(input).css({
            "position": "relative",
            "z-index": 999999
        });
    }
});

1
Nhưng điều này chỉ ảnh hưởng đến đầu vào chứ không ảnh hưởng đến lớp phủ bộ chọn ngày?
markyzm

2
Tôi đang sử dụng ví dụ này jqueryui.com/datepicker mà nó không sử dụng biểu tượng cho trình chọn ngày. Với giải pháp này, tôi không gặp vấn đề với các thành phần web còn lại.
Lucas

5

Thêm vào câu trả lời của Justin, nếu bạn lo lắng về việc đánh dấu không gọn gàng hoặc bạn không muốn giá trị này được mã hóa cứng trong CSS, bạn có thể đặt đầu vào trước khi nó được hiển thị. Một cái gì đó như thế này:

$('input').datepicker({
    beforeShow:function(input){
        $(input).dialog("widget").css({
            "position": "relative",
            "z-index": 20
        });
    }
});

Lưu ý rằng bạn không thể bỏ qua "position": "relative"quy tắc, vì plugin trông theo kiểu nội tuyến cho cả quy tắc hoặc biểu định kiểu, nhưng không phải cả hai .

Đây dialog("widget")là công cụ chọn ngày thực tế bật lên.


1
Vấn đề này nên được giải quyết trong các tập lệnh JqueryUI và được đặt để ngăn lớp phủ theo mặc định. Đa số các trường hợp sử dụng sẽ không bao giờ muốn bất kỳ đầu vào nào phủ lên khả năng nhập lịch. Nếu cần có đầu vào (hoặc các yếu tố khác) phủ lên lịch, thì nên sử dụng giải pháp như thế này. Phải nói rằng, @marksyzm sẽ là giải pháp IMO tốt nhất vì bạn chỉ áp dụng nó khi cần thiết.
FrankO

5

Tôi đã gặp sự cố này, tôi đã giải quyết bằng cách sử dụng khi nhấp vào:

var checkin = $('.dpd1').datepicker()
.on('click', function (ev) {
        $('.datepicker').css("z-index", "999999999");
}).data('datepicker');

Giải pháp này hoạt động hoàn hảo trên cửa sổ bật lên đối với tôi. Cảm ơn !
darkomen

5

Tôi có một hộp thoại sử dụng bộ chọn ngày trên đó. Nó luôn luôn được che giấu. Khi tôi điều chỉnh chỉ số z, trường ở biểu mẫu bên dưới luôn hiển thị trên hộp thoại.

Tôi đã sử dụng kết hợp các giải pháp mà tôi đã thấy để giải quyết vấn đề.

$('.ui-datepicker', $form).datepicker({
                showButtonPanel: true,
                changeMonth: true,
                changeYear: true,
                dateFormat: "yy-M-dd",
                beforeShow: function (input) {
                    $(input).css({
                        "position": "relative",
                        "z-index": 999999
                    });
                },
                onClose: function () { $('.ui-datepicker').css({ 'z-index': 0  } ); }                    
            });

Chương trình trước đảm bảo rằng trình chọn ngày luôn ở trên cùng khi được chọn, nhưng onClose đảm bảo rằng chỉ mục z của trường được đặt lại để nó không trùng lặp trên bất kỳ hộp thoại nào được mở sau này bằng một trình chọn ngày khác.


Giải pháp này là tuyệt vời và đã giải quyết được vấn đề của tôi. Nhưng hãy chỉnh sửa nó một chút ở phần "onClose". Tôi đặt $(this)thay vì $('.ui-datepicker'). Vì vậy, nó sẽ được đặt thành z-index:0"this input" thay vì tất cả các đầu vào với lớp ui-datepicker.
Asuka165


1

Tôi có một trang nơi công cụ chọn ngày ở trên cùng của nút công cụ bảng datatables.net. Các nút dữ liệu có chỉ số z cao hơn các nút ngày của trình chọn ngày riêng lẻ. Nhờ câu trả lời của Ronye, ​​tôi đã có thể giải quyết vấn đề này bằng cách sử dụng vị trí: tương đối; và z-index: 10000. Cảm ơn!


1

Điều này đã xảy ra với tôi khi tôi thiếu chủ đề. Đảm bảo rằng chủ đề tồn tại hoặc có thể cung cấp lại chủ đề và tải lại chủ đề đó lên máy chủ của bạn.


1

Đó là những gì đã giải quyết vấn đề của tôi:

 $( document ).ready(function() {   
    $('#datepickerid').datepicker({
     zIndexOffset: 1040 #or any number you want
     });
});

1

Trên thực tế, bạn có thể thêm vào css của mình một cách hiệu quả .ui-datepicker{ z-index: 9999 !important;}nhưng bạn có thể sửa đổi jquery-ui.csshoặc jquery-ui.min.cssthêm vào cuối lớp ui-datepicker z-index: 9999 !important;. cả hai thứ đều phù hợp với tôi (Bạn chỉ cần một cái ;-))


0

Tôi cũng gặp sự cố này, vì trình chọn ngày sử dụng chỉ mục z của đầu vào, tôi đã thêm css sau

#dialogID input,.modal-dialog input, .modal-dialog .input-group .form-control{
  z-index:inherit;
}

Chỉ cần lấy quy tắc áp dụng cho của bạn, theo id cha, lớp hoặc trong trường hợp của tôi là hộp thoại khởi động, sử dụng nhóm đầu vào và điều khiển biểu mẫu của chúng.


0

tôi phải

.datepicker.dropdown-menu {
    position: relative;
    z-index: 9999 !important;
}
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.