使用AJAX的JQuery日期选择器插件出现错误

8
我尝试这样做,禁用所有日期并启用通过参数传递的日期。
这段代码不起作用。
$.ajax({
    method: "GET",
    url: "url",
})
.success(function(msg) {
    console.log(JSON.parse(msg));
    var disableIni = JSON.parse(msg);

    var disable = [];

    for (var i = 0; i < disableIni.length; i++)
    {
        disable[i] = moment(disableIni[i][0] + "/" + disableIni[i][1] + "/" + disableIni[i][2], "M/DD/YYYY");
        if (i > 5)
        {
            break;
        }
    }

    console.log(disable);

    var vectorTest = [moment("5/25/2017", "M/DD/YYYY"), moment("5/26/2017", "M/DD/YYYY"), moment("5/27/2017", "M/DD/YYYY")];

    console.log(vectorTest);

    var vector = disable;
    console.log(vector);

    $('#input_from').datetimepicker({
        locale: 'es',
        format: 'DD-MM-YYYY',
        enabledDates: $.each(vector, function(i, value) {
            return value;
        })
    });
});

但是如果我将 var vector = disable 改为 var vector = vectorTest,就能正常工作:
$.ajax({
    method: "GET",
    url: "url",
})
.success(function(msg) {
    console.log(JSON.parse(msg));
    var disableIni = JSON.parse(msg);

    var disable = [];

    for (var i = 0; i < disableIni.length; i++)
    {
        disable[i] = moment(disableIni[i][0] + "/" + disableIni[i][1] + "/" + disableIni[i][2], "M/DD/YYYY");
        if (i > 5)
        {
            break;
        }
    }

    console.log(disable);

    var vectorTest = [moment("5/25/2017", "M/DD/YYYY"), moment("5/26/2017", "M/DD/YYYY"), moment("5/27/2017", "M/DD/YYYY")];

    console.log(vectorTest);

    var vector = vectorTest;
    console.log(vector);

    $('#input_from').datetimepicker({
        locale: 'es',
        format: 'DD-MM-YYYY',
        enabledDates: $.each(vector, function(i, value) {
            return value;
        })
    });
});

它可能做我想要的吗?
编辑
Ajax响应:

enter image description here

这是一个包含其他3个位置数组的数组。[0] => 月份,[1] => 日,[2] => 年份。

谢谢。

1
你的 msg 变量是字符串还是对象?如果是对象,请使用 msg.data - Alive to die - Anant
1
创建一个变量 disableParams = [true,msg],然后使用它来禁用:disable:disableParams - Ranjeet Singh
1
尝试使用以下代码:msgArr = JSON.parse(msg),然后使用msgArr。JSON.parse()函数将字符串转换为数组。 - iibtisam
1
现在出了什么错误? 如果上面的结果是一个字符串,通过添加tempMsg =“ [”+ msg +“]”将其变为2D数组字符串,然后使用JSON.parse(tempMsg)将其转换为2D数组。 - iibtisam
1
尝试这个—— tempMsg = "["+msg+"]" => 它将给你一个二维数组字符串—— 然后 msgArr = JSON.parse(tempMsg) => 给你一个二维数组,即 [[2017,4,23],[2017,4,24], ...]—— 然后 dissableArr = msgArr.unshift(true) => 给你 [ true, [2017,4,23],[2017,4,24], ...]—— 最后使用 disable: disableArr - iibtisam
显示剩余13条评论
2个回答

3
您可以像下面这样做:
$.ajax({
  method: "GET",
  url: "url",
  dataType: "json",
  success: function(response){
    var disable = [];
    for(var i=0; i<response.length; i++){
      var data = response[i];
      disable.push( moment([ data[2], data[0], data[1] ]) );
    }

    $('#input_from').datetimepicker({
      locale: 'es',
      format: 'DD-MM-YYYY',
      enabledDates: disable
    });
  }
});

你可以使用 jQuery.ajaxsuccessdataType 键。
然后,您可以循环您的结果并使用 moment(Array) 方法构建一个 moment 对象数组,并将其传递给 datetimepicker 的 enabledDates 选项。

1
您可以使用beforeShowDay,该函数以日期为参数,并必须返回一个包含以下内容的数组:
  • [0]:true/false,指示是否可选择此日期
  • [1](可选):要添加到日期单元格的CSS类名称,或""以获取默认显示效果
  • [2](可选):此日期的弹出提示
在显示日期选择器之前,将为每个日期调用该函数。
请参见以下内容:

var availableDates = [[2017,6,1],[2017,6,2],[2017,6,5]];

function available(date) {
  t = [date.getDate(),(date.getMonth()+1),date.getFullYear()];
  var result = $.grep(availableDates, function(v,i) {
    return v[0]===t[2] && v[1]===t[1] && v[2]===t[0];
  }).length > 0;
  return [result];
}

$('#date').datepicker({ beforeShowDay: available });
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>Date: <input type="text" name="date" id="date" readonly="readonly" size="12" />

在上面的代码中,你可以通过修改布尔条件来切换启用/禁用length > 0而不是length == 0。希望这能帮到你,再见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接