2017-08-18 202 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(日期),但它總是損害我以前禁用約會的限制允許的那些日子的功能...我想都工作,而不是一個毀了另一個...... beforeShowDay我可以不適用兩次 – Lissi29

回答

0

您絕對應該在實例化日期選擇器之前獲取您希望禁用的所有日期。如你現在所做的那樣,你觸發了30個不同的ajax請求(每日一次,日曆呈現)。

而一旦請求出來獲取結果,腳本dosn't「等待」它。
所以行return nFechas;立即發生。

Ajax是assynchronous ...發送請求並返回結果需要幾毫秒。異步意味着:它不會「暫停」腳本。

如果它正在暫停腳本...這將需要10秒(也許更多)來呈現日曆,我相信你會不喜歡。

如果您在頁面加載時獲得數組中禁用的所有日期,則對請求的處理方式會更加「昂貴」。然後在日曆呈現中,只需檢查日期是否在數組中以禁用。

所以你最好的解決方案是here

編輯

試試這個:

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

要解釋,我的日期選擇器此時已禁用21-08-2017和23-08-2017,因爲已經有最多註冊的醫療預約......你的解決方案在我的日期選擇器中工作,但事實證明,它獨立工作,並自動禁用我已有的日子的驗證,包括驗證週末的日子......這是問題,我不能加入兩個驗證,因爲他們相互碰撞,我必須做錯了或我不能諮詢 – Lissi29

+0

您可以使用驗證你有,這是返回假,如果一天星期是6或0(sat和sun)...如果在禁用數組中找到日期,則返回false('array.indexOf(string)!= -1'),如果日期與這3種情況中的任何一個匹配,則返回true 。 –

+0

如果(日== 6 ||日== 0 || array.indexOf(string)== -1){return [false,「somecssclass」]和datepicker它是什麼它是完全禁用,並只啓用數組內部的日子...如果我把真正的內部返回而不是假的,通常是什麼功能的日期選擇器沒有新的驗證的具體日子禁用 – Lissi29

相關問題