基于ajax php mysql表禁用jquery datepicker日历日

基于ajax php mysql表禁用jquery datepicker日历日,php,jquery,mysql,ajax,json,Php,Jquery,Mysql,Ajax,Json,当我点击datepicker时,我已经有了一个可以正常工作的程序,使用“beforeShowDay”函数,我触发了一个$.getJSON PHP过程,该过程读取一个MySQL表,创建一个数组,使用另一个函数,我禁用了我想要的dataepicker日历上的日期。这工作正常,仅适用于一个日历。现在我需要在PHP/MySql列表上生成的多个日历上取消datepickers days。这是我的代码,希望你能理解我并给我帮助 <script> var unavailableDates =

当我点击datepicker时,我已经有了一个可以正常工作的程序,使用“beforeShowDay”函数,我触发了一个$.getJSON PHP过程,该过程读取一个MySQL表,创建一个数组,使用另一个函数,我禁用了我想要的dataepicker日历上的日期。这工作正常,仅适用于一个日历。现在我需要在PHP/MySql列表上生成的多个日历上取消datepickers days。这是我的代码,希望你能理解我并给我帮助

<script>
   var unavailableDates = [];
   $(document).ready(function(){
    var myTour = "<?php echo $tourid ;?>";
    $.getJSON('closed_dates.php',{ 
         tourid: myTour
    },
     function(data) {
        unavailableDates = data;
   }); });

function unavailable(date) {
  ymd = date.getFullYear() + "-" + ("0"+(date.getMonth()+1)).slice(-2) + "-" +  ("0"+date.getDate()).slice(-2);
day = new Date(ymd).getDay();
if ($.inArray(ymd, unavailableDates) < 0) {
    return [true, "enabled", "Book Now"];
} else {
    return [false,"disabled","Sold Out"];
}
}  



enter code here$(function() {

  $('.iDate').datepicker({
      dateFormat: 'dd-mm-yy', 
      minDate: 0, 
      beforeShowDay: unavailable,

   });});</script>

var不可用日期=[];
$(文档).ready(函数(){
var myTour=“”;
$.getJSON('closed_dates.php',{
旅游者:我的旅游
},
功能(数据){
不可用日期=数据;
}); });
功能不可用(日期){
ymd=date.getFullYear()+“-”+(“0+(date.getMonth()+1)).slice(-2)+“-”+(“0+”date.getDate()).slice(-2);
day=新日期(ymd).getDay();
如果($.inArray(ymd,不可用日期)<0){
返回[true,“enabled”,“Book Now”];
}否则{
退货[假,“禁用”,“售罄];
}
}  
在此处输入代码$(function(){
$('.iDate').datepicker({
日期格式:“dd-mm-yy”,
minDate:0,
展会日前:不可用,
});});
如果只有一个日历,这段代码可以工作,但我需要能够从列表中禁用datepickers日历日,这是我的PHP代码

$query_tours = "Select * from tours where status ='A' and featured = 'Y' order by rand() limit 0,20" ;
$result_tours = mysql_query($query_tours);
while($row=mysql_fetch_array($result_tours )) {
$tourid   = $row['recid'];
$tit_ing  = $row['tit_ing'];
(some html/css code here .....)
print "<input type='number' name='adults'>";
print "<input type='number' name='children'>";
print "<input type='text' name='tourdate' class='iDate' id='date$tourid'>";
}
$query\u tours=“选择*从状态为'A'和特色为'Y'的旅行中按兰德排序()限制0,20”;
$result\u tours=mysql\u query($query\u tours);
while($row=mysql\u fetch\u数组($result\u)){
$tourid=$row['recid'];
$tit_ing=$row['tit_ing'];
(这里有一些html/css代码…)
打印“”;
打印“”;
打印“”;
}
因此,我不知道如何从php(list)传递id值,并将其作为$getJSON上的'myTour'值发送给每个datepicker日历


希望,有人能理解我,致以最诚挚的问候,

您的示例中的
tourid
.iDate
id
减去
date
这个词,可以这样访问:

$(this).id.substr(4);
print "<script>unavailableDates[$tourid]=$getDates(tourid);</script>";
由于您预加载了
unavailableDates
,因此它可能是一个由该
tourid
索引的数组

var unavailableDates = [];
$(document).ready(function(){

    $('.iDate').each(function () { // For each iDate object
        var myTour = $(this).id.substr(4); // Get tourid from iDate id
        $.getJSON('closed_dates.php',{ 
            tourid: myTour
            },
            function(data) {
                unavailableDates[myTour] = data; // Add to the array
 }); }); });
然后,在函数
unavailable
(顺便说一句,这不是一个好名字)中,您可以通过
this
id
unavailableDates
数组进行索引,该id被反向代码设置为
'date$tourid'

function unavailable(date) {
    var myTour = $(this).id.substr(4); // Get the tourId
    ...
    if ($.inArray(ymd, unavailableDates[myTour]) < 0) {
    ...
}
功能不可用(日期){
var myTour=$(this).id.substr(4);//获取tourId
...
如果($.inArray(ymd,不可用日期[myTour])<0){
...
}
并不是说这会触发与日历一样多的ajax请求。因为您正在预加载,所以最好将数组直接包含在第一个PHP页面中,如下所示:

$(this).id.substr(4);
print "<script>unavailableDates[$tourid]=$getDates(tourid);</script>";
打印“不可用日期[$tourid]=$getDates(tourid);”;

Hi,我尝试了第一个选项,但仅在第二次单击datapicker时,它会更新不可用的天数。当我尝试第二个选项时,我收到一条错误消息“tourid未定义”。您对$getDates(tourid)的意思是什么?感谢您的时间和帮助,我已经处理这个问题两天了!!你好,Ariel,我发现了问题。我在myTour=$(这个).id.substr(4)中缺少“var”;现在,它工作正常。非常感谢您的帮助。