2017-08-18 22 views
-1

現在、私はPHPで日付を記入するシステムを行っており、日付ピッカーを設定して、すでに最大数の予定があった日を無効にしています。このプロセスを実行するために、私は次のように適用される:特定の日付ピッカー日を無効にする

<script> 

function nDates(date){ 
    var nFechas = false; 
    $.ajax({ 
    type: "POST", 
    url: 'prueba.php', 
    data: {date}, 
    async: false, 
    success: function(data) { 
     if (data == 1) 
     nFechas = true; 
     else 
     nFechas = false; 
    }, 
    error: function() { 
     alert('Error occured'); 
    } 
    }); 
    return nFechas; 
} 


$(function() { 
    $.datepicker.setDefaults($.datepicker.regional["es"]); 
    $("#datepicker").datepicker({ 
    dateFormat: 'yy-mm-dd', 
    changeMonth:true, 
    changeYear:true, 
    yearRange: "2017:2018", 
    firstDay: 1, 
    minDate: 0, 

    beforeShowDay: function (date) { 
     var datesLimits = 20; 
     var day = date.getDay(); 
     var dd = date.getDate(); 
     var mm = date.getMonth()+1; 
     var yyyy = date.getFullYear(); 
     if(dd<10){ 
     dd='0'+dd; 
     } 
     if(mm<10){ 
     mm='0'+mm; 
     } 
     var date = yyyy+'-'+mm+'-'+dd; 
     if (day == 6 || day == 0) { 
     return [false, "somecssclass"] 
     } else { 
     if (nDates(date)){ 
      return [true, "someothercssclass"] 
     } else {         
      return [false, "somecssclass"] 
     } 
     }}, 

    monthNames: ['Enero', 'Febrero', 'Marzo', 
       'Abril', 'Mayo', 'Junio', 
       'Julio', 'Agosto', 'Septiembre', 
       'Octubre', 'Noviembre', 'Diciembre'], 
    monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 
         'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], 
    dayNamesMin: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'], 
    closeText: 'Cerrar', 
    prevText: 'Anterior', 
    nextText: 'Siguiente', 
    currentText: 'Hoy', 
    }); 
}); 

</script> 

私が今欲しい例えば、非常に特定の日無効にすることです(14-09-2017)(25-12-2017)(28-12 -2017)など、私がこれまで行ってきたことを維持しています。私は少し読んでいくつかのことを適用しましたが、私が読んだことに適応する方法を見つけることができません。

+1

を。これはこれですか?https://jqueryui.com/datepicker/? –

+0

[これらの回答](https://stackoverflow.com/search?q=answers%3A1%2B+isaccepted%3Ayes+datepicker+disable+dates)を見てください...あなたのソリューションは確かにそこにあります。 –

+0

申し訳ありませんが、私は自分自身を理解していないと思います。私はすでにvar disableddates = ["8-21-2017"、 "12-11-2016"、 "8 -25-2017 "、" 8-20-2017 "]; 機能DisableSpecificDates(date)しかし、これは、予定が制限値に達する日を無効にするために以前に持っていた機能に損害を与えます...私は仕事をしたいと思っています。 2回適用されない – Lissi29

答えて

0

datepickerをインスタンス化する前に、無効にするすべての日付をフェッチする必要があります。

今のように、30種類のAjaxリクエスト(カレンダーのレンダリングと同じように、毎日1つ)をトリガーします。

そして、要求が結果をフェッチするようになったら、スクリプトはそれを "待つ"ことはありません。
したがって、すぐにreturn nFechas;という行が表示されます。

Ajaxはアシンクロナスです...リクエストを送信して結果を返すのに数ミリ秒かかります。非同期の意味:スクリプトを「一時停止」しません。

スクリプトを一時停止していた場合...これはカレンダーのレンダリングに最大10秒かかることがありますが、これはあなたが気に入らないと確信しています。

ページの読み込み時に配列内のすべての日付を無効にすると、要求がより高価になります。カレンダーのレンダリングで、日付が無効になるかどうかを確認してください。

あなたの最高のソリューションはhereです。

EDIT

この試してみてください:あなたのサイトに使用されている日付ピッカーへのリンクを提供してください

if (day == 6 || day == 0) { 
    return [false, "somecssclass"] 
} else if (disabledArray.indexOf(date) != -1){ 
    return [false, "someothercssclass"] 
} else { 
    return [true, "anothercssclass"] 
} 
+0

私は説明していますが、今の私のdatepickerは21-08-2017と23-08-2017を無効にしています。ソリューションは私のdatepickerで動作しますが、それは単独で動作することが判明し、自動的に私がすでに持っていた日の検証を無効にします。それは私が間違ってやっていなければならないこと、あるいは私が相談することができないものであるということです。 – Lissi29

+0

あなたが持っていたバリデーションを使うことができます。 weekは6または0(satおよびsun)...無効な配列( 'array.indexOf(string)!= -1')に日付が見つかった場合はfalseを返し、日付がこれら3つのケースのいずれかと一致する場合はtrueを返します。 –

+0

私はこの部分にこのように配置しました。(day == 6 || day == 0 || array.indexOf(string)== -1){return [false、 "somecssclass"]とdatepicker doesは完全に無効になり、配列内にある日だけが有効になります... falseの代わりにtrueを返した場合、無効にする特定の日の新しい検証なしにdatePickerを通常どおりに機能させるのは – Lissi29

関連する問題