Trình chọn ngày giao diện người dùng jquery. Vô hiệu hóa mảng Ngày


84

Tôi đã cố gắng tìm kiếm giải pháp cho vấn đề người chọn ngày trong Jquery ui của mình và tôi không gặp may. Đây là những gì tôi đang cố gắng làm ...

Tôi có một ứng dụng mà tôi đang thực hiện một số PHP phức tạp để trả về một mảng JSON ngày tháng mà tôi muốn CHẶN ra khỏi Trình chọn ngày giao diện người dùng Jquery. Tôi đang trả lại mảng này:

["2013-03-14","2013-03-15","2013-03-16"]

Không có một cách đơn giản nào để nói một cách đơn giản: chặn những ngày này khỏi trình chọn ngày?

Tôi đã đọc tài liệu về giao diện người dùng và tôi không thấy điều gì giúp ích được cho mình. Còn ai có ý tưởng nào không?






Ai đó có thể đăng ký cho tôi những câu hỏi tương tự nhưng sử dụng bộ chọn ngày của Materialize không?
naz786

Câu trả lời:


208

Bạn có thể sử dụng beforeShowDay để thực hiện việc này

Ví dụ sau vô hiệu hóa các ngày từ 14 tháng 3 năm 2013 đến ngày 16 tháng 3 năm 2013

var array = ["2013-03-14","2013-03-15","2013-03-16"]

$('input').datepicker({
    beforeShowDay: function(date){
        var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
        return [ array.indexOf(string) == -1 ]
    }
});

Demo: Fiddle


1
Tôi muốn biết bạn đang đi đâu với điều đó. Tôi sẽ kết hợp mảng ngày của mình như thế nào.
Daniel White,

14
WOW. Anh là một thiên tài kỳ lạ. Tôi không biết tại sao câu hỏi này không có trong các bài đăng tràn ngăn xếp cho câu hỏi này vì nó đã được hỏi hàng triệu lần. Tất cả các ví dụ được đăng ở trên đều quá phức tạp, điều này rất hay và đơn giản. 5 sao. Cảm ơn.
Daniel White

tôi đã tải xuống mã jqueryui.com/download/… nhưng khi tôi tích hợp mã ở trên vào nó, nó không hoạt động. Làm ơn giúp tôi
Sam

Một ủng hộ là không đủ. Một số người làm cho mọi thứ trở nên phức tạp hơn mức họ cần. Cảm ơn bạn rất nhiều vì một đoạn mã đơn giản, hiệu quả. Rất hữu dụng.
0112

4
Nếu bạn cũng muốn làm loại trừ cuối tuần bên cạnh những ngày tùy chỉnh, thay thế dòng trở lại của thành viên này:return array.indexOf(string) != -1 ? [false] : $.datepicker.noWeekends(date);
Pablo SG Pacheco

20

IE 8 không có hàm indexOf, vì vậy tôi đã sử dụng jQuery inArray để thay thế.

$('input').datepicker({
    beforeShowDay: function(date){
        var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
        return [$.inArray(string, array) == -1];
    }
});

6
@ChristopherStrydom, bạn sẽ ngạc nhiên khi có nhiều người vẫn sử dụng nó.
euther

3
Điều này là do IE8 là trình duyệt IE mới nhất sẽ chạy trên WinXP (SP3).
JosephK

Tuy nhiên, nó hỗ trợ hàm indexOf () trên một chuỗi để tìm vị trí của một chuỗi con trong chuỗi đó.
Wezy

9

Nếu bạn cũng muốn chặn các ngày Chủ nhật (hoặc các ngày khác) cũng như mảng ngày tháng, tôi sử dụng mã này:

jQuery(function($){

    var disabledDays = [
       "27-4-2016", "25-12-2016", "26-12-2016",
       "4-4-2017", "5-4-2017", "6-4-2017", "6-4-2016", "7-4-2017", "8-4-2017", "9-4-2017"
    ];

   //replace these with the id's of your datepickers
   $("#id-of-first-datepicker,#id-of-second-datepicker").datepicker({
      beforeShowDay: function(date){
         var day = date.getDay();
         var string = jQuery.datepicker.formatDate('d-m-yy', date);
         var isDisabled = ($.inArray(string, disabledDays) != -1);

         //day != 0 disables all Sundays
         return [day != 0 && !isDisabled];
      }
   });
});   

1
$('input').datepicker({
   beforeShowDay: function(date){
       var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
       return [ array.indexOf(string) == -1 ]
   }
});

1

beforeShowDate không phù hợp với tôi, vì vậy tôi đã tiếp tục và phát triển giải pháp của riêng mình:

$('#embeded_calendar').datepicker({
               minDate: date,
                localToday:datePlusOne,
               changeDate: true,
               changeMonth: true,
               changeYear: true,
               yearRange: "-120:+1",
               onSelect: function(selectedDateFormatted){

                     var selectedDate = $("#embeded_calendar").datepicker('getDate');

                    deactivateDates(selectedDate);
                   }

           });


              var excludedDates = [ "10-20-2017","10-21-2016", "11-21-2016"];

              deactivateDates(new Date());

            function deactivateDates(selectedDate){
                setTimeout(function(){ 
                      var thisMonthExcludedDates = thisMonthDates(selectedDate);
                      thisMonthExcludedDates = getDaysfromDate(thisMonthExcludedDates);
                       var excludedTDs = page.find('td[data-handler="selectDay"]').filter(function(){
                           return $.inArray( $(this).text(), thisMonthExcludedDates) >= 0
                       });

                       excludedTDs.unbind('click').addClass('ui-datepicker-unselectable');
                   }, 10);
            }

            function thisMonthDates(date){
              return $.grep( excludedDates, function( n){
                var dateParts = n.split("-");
                return dateParts[0] == date.getMonth() + 1  && dateParts[2] == date.getYear() + 1900;
            });
            }

            function getDaysfromDate(datesArray){
                  return  $.map( datesArray, function( n){
                    return n.split("-")[1]; 
                });
             }

Chúng ta có thể làm điều này tương tự trên dateRangePicker không ??
Sunil Rawat

1

Đối với DD-MM-YY, hãy sử dụng mã này:

var array = ["03-03-2017 ', '03 -10-2017', '03 -25-2017"]

$('#datepicker').datepicker({
    beforeShowDay: function(date){
    var string = jQuery.datepicker.formatDate('dd-mm-yy', date);
    return [ array.indexOf(string) == -1 ]
    }
});

function highlightDays(date) {
    for (var i = 0; i < dates.length; i++) {
    if (new Date(dates[i]).toString() == date.toString()) {
        return [true, 'highlight'];
    }
}
return [true, ''];
}

Có thể cho daterangepicker không, tôi muốn tắt một mảng ngày trên date-range-picker ??
Sunil Rawat

Bạn có thể vui lòng xác định câu hỏi của bạn?
Dierig Patrick

Tôi có bộ chọn phạm vi ngày, giả sử: 01/01/2017 - 31/03/2017. Tôi muốn đánh dấu một số ngày trong một mảng các ngày tùy chỉnh giữa phạm vi này. trên lịch phạm vi ngày. $ date = ['02 / 01 / 2017','03/01/2017'...vẫn] những ngày này. là có thể?
Sunil Rawat

giống như trong datepicker, chúng ta có thể sử dụng hàm: beforeShowDay cho mục đích này, có gì trong date-range-picker: daterangepicker.com
Sunil Rawat

1

Nếu bạn muốn tắt (các) ngày cụ thể trong trình chọn ngày jquery thì đây là bản demo đơn giản dành cho bạn.

<script type="text/javascript">
    var arrDisabledDates = {};
    arrDisabledDates[new Date("08/28/2017")] = new Date("08/28/2017");
    arrDisabledDates[new Date("12/23/2017")] = new Date("12/23/2017");
    $(".datepicker").datepicker({
        dateFormat: "dd/mm/yy",
        beforeShowDay: function (date) {
            var day = date.getDay(),
                    bDisable = arrDisabledDates[date];
            if (bDisable)
                return [false, "", ""]
        }
    });
</script>
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.