Jquery kullanıcı arayüzü tarih seçici. Tarih dizisini devre dışı bırak


84

Jquery kullanıcı arabirimi veri seçici sorunuma bir çözüm aramaya çalışıyorum ve hiç şansım yok. İşte yapmaya çalıştığım şey ...

Jquery UI Datepicker'dan BLOCKED olmasını istediğim JSON tarih dizisini döndürmek için bazı karmaşık PHP yaptığım bir uygulamam var. Bu diziyi geri getiriyorum:

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

Basitçe şunu söylemenin basit bir yolu yok mu: Bu tarihleri ​​tarih seçiciden engelle?

UI belgelerini okudum ve bana yardımcı olacak hiçbir şey görmüyorum. Herhangi bir fikri olan var mı?






Birisi beni benzer sorulara yöneltebilir, ancak Materialise veri seçici kullanabilir mi?
naz786

Yanıtlar:


209

Bunu yapmak için beforeShowDay'i kullanabilirsiniz

Aşağıdaki örnek, 14 Mart 2013 - 16 Mart 2013 tarihlerini devre dışı bırakır

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: Keman


1
Ben bununla nereye gideceğini görüyorum. Yine de tarih dizimi nasıl dahil edebilirim?
Daniel White

14
VAY. Sen tam bir dahisin kardeşim. Milyonlarca kez sorulduğundan, bunun neden bu soru için yığın taşma mesajlarında neden olmadığını bilmiyorum. Yukarıda yayınlanan tüm örnekler çok karmaşık, bu hoş ve basit. 5 yıldız. Teşekkürler.
Daniel White

jqueryui.com/download/… kodunu indirdim ancak yukarıdaki kodu içine entegre ettiğimde çalışmıyor lütfen yardım edin
Sam

Bir olumlu oy yeterli değildir. Bazı insanlar işleri olması gerekenden daha karmaşık hale getirir. Basit, çalışan bir pasaj için çok teşekkür ederim. Çok kullanışlı.
0112

4
Bu özel tarihlerin yanı sıra hafta sonlarını da hariç tutmak istiyorsanız, dönüş satırını return array.indexOf(string) != -1 ? [false] : $.datepicker.noWeekends(date);
Pablo SG Pacheco

20

IE 8'de indexOf işlevi yok, bu yüzden onun yerine jQuery inArray kullandım.

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

6
@ChristopherStrydom, onu kaç kişinin hala kullandığına şaşıracaksınız.
euther

3
Bunun nedeni, IE8'in WinXP (SP3) üzerinde çalışacak en yeni IE tarayıcısı olmasıdır.
JosephK

Bununla birlikte, dizedeki bir alt dizenin konumunu bulmak için bir dizedeki indexOf () işlevini destekler.
Wezy

9

Pazar günlerini (veya diğer günleri) ve tarih dizisini de engellemek istiyorsanız, bu kodu kullanıyorum:

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 benim için işe yaramadı, bu yüzden devam ettim ve kendi çözümümü geliştirdim:

$('#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]; 
                });
             }

Aynı şeyi dateRangePicker'da da yapabilir miyiz?
Sunil Rawat

1

GG-AA-YY için şu kodu kullanın:

var dizi = ["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, ''];
}

Daterangepicker için mümkün mü, tarih aralığı seçicide bir dizi tarihi devre dışı bırakmak istiyorum ??
Sunil Rawat

Lütfen sorunuzu açıklar mısınız?
Dierig Patrick

Tarih aralığı seçicim var varsayalım: 01/01/2017 - 31/03/2017. Bazı tarihleri ​​vurgulamak istiyorum, bu aralık arasında özel tarihler dizisi. tarih aralığı takviminde. $ tarihler = ['02 /01/2017','03/01/2017'...till] bu tarihler. mümkün mü
Sunil Rawat

datepicker'da olduğu gibi, bu amaçla kullanabiliriz: beforeShowDay işlevini, tarih aralığı-seçicide ne var: daterangepicker.com
Sunil Rawat

1

Jquery datepicker'da belirli tarihleri ​​devre dışı bırakmak istiyorsanız, işte size basit bir demo.

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.