如何在 jQuery 中突出显示日期?

Posted

技术标签:

【中文标题】如何在 jQuery 中突出显示日期?【英文标题】:How can highlight a date in jQuery? 【发布时间】:2018-07-06 16:11:17 【问题描述】:

我无法动态突出显示日历中的日期,如果我这样做,只会突出显示静态日期:

eventDates[new Date('01/09/2018')] = new Date('01/09/2018')

这是我的代码:

$(function() 
  // An array of dates
  var eventDates = [];
  $.ajax(
    type: "GET",
    url: "@Url.Action("
    GetEvents ", "
    Home ")",
    dataType: "json",
    data: "",
    success: function(data) 
      $.each(data, function(i, val) 
        var dd = CTD(val.Date); //CTD means convert into date 
        eventDates[i] = dd;
      );
    
  );
  // convert in date
  function CTD(d) 
    var date = new Date(parseInt(d.substr(6)));
    var month = date.getMonth() + 1;
    return date.getDate() + "/" + month + "/" + date.getFullYear();
  

  //eventDates[new Date('01/09/2018')] = new Date('01/09/2018');

  // datepicker
  $('#datepicker').datepicker(
    beforeShowDay: function(date) 
      var highlight = eventDates[date];
      if (highlight) 
        return [true, "event", 'Tooltip text'];
       else 
        return [true, '', ''];
      
    
  );
);

【问题讨论】:

您使用什么语言,C# 还是 VB?您的视图使用什么语言,Razor 还是 ASPX? asp.net mvc Razor (C#) 使用 【参考方案1】:

然后在DatePicker 中,您在数组索引中进行搜索,因此您将找不到日期。要查找您需要使用indexOf() 方法的日期,并且您需要将DatePicker 日期格式化为您保存在数组中的相同格式:

var month = date.getMonth() + 1;
date = date.getDate() + "/" + month + "/" + date.getFullYear();
var highlight = eventDates.indexOf(date);

您无需重复代码来格式化日期,而是将格式化代码从 CTD() 函数中提取到一个新函数中:

// convert in date
function CTD(d) 
  var date = new Date(parseInt(d.substr(6)));
  return FD(date);

// format date
function FD(d) 
  return d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear();

最后,您要确保 DatePicker 的代码仅在 Ajax 结果返回后运行,因此放入一个函数并从 Ajax 的 success 调用它:

$(function() 
  $.ajax(
    type: "GET",
    url: "@Url.Action("GetEvents", "Home")",
    dataType: "json",
    data: "",
    success: function(data) 
      var eventDates = []; //An array of dates
      $.each(data, function(i, val) 
        eventDates[i] = CTD(val.Date); //CTD means convert into date 
      );
      HighlighEvents(eventDates);
    
  );
  // convert in date
  function CTD(d) 
    var date = new Date(parseInt(d.substr(6)));
    return FD(date);
  
  // format date
  function FD(d) 
    return d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear();
  
  // datepicker
  function HighlighEvents(eventDates) 
    $('#datepicker').datepicker(
      beforeShowDay: function(date) 
        var highlight = eventDates.indexOf(FD(date));
        if (highlight > -1) 
          return [true, "event", 'Tooltip text'];
         else 
          return [true, '', ''];
        
      
    );
  
);

【讨论】:

它没有使用完整,我没有使用任何输入文件 对不起,我不明白你的评论。你说你的日期来自数据库。那将在控制器中,那么您如何将其从控制器发送到视图?如果您使用该模型,我举了一个例子。如果您改用DataView,代码将类似。如果您需要帮助,请在问题中发布您的代码。 数据以 json 形式从控制器发送,例如 public JsonResult GetEvents() var events = db.Events.ToList();返回新的 JsonResult 数据 = 事件,JsonRequestBehavior = JsonRequestBehavior.AllowGet ; 糟糕!我忘记更改您的原始状态if (highlight)。应该是if (highlight > -1)。请参阅我的更新答案。 并为多个 Highlight 更新 enventDates[i] 而不是 eventDates[1]

以上是关于如何在 jQuery 中突出显示日期?的主要内容,如果未能解决你的问题,请参考以下文章

在jquery UI datepicker中突出显示日期

如何显示带有突出显示日期的 jquery 日历并禁止单击(只读)

突出显示 jQuery datepicker 日期

在 jQuery 日历中突出显示数据库中的日期

在 Jquery Datepicker 中动态更改突出显示的日期

在 jQuery Datepicker 上突出显示 MySql 日期