jQuery函数评估时序

时间:2014-03-02 18:25:33

标签: javascript jquery jquery-ui datepicker

我有一个使用jQuery UI datepicker的页面。我试图在我的页面上发生以下情况:

  • 点击日期字段 - >弹出日历(datepicker负责处理)
  • 点击日历日 - > ajax请求触发,执行一些服务器端计算(检查调度冲突等),并在忙碌的一天显示警告

这不完全是验证,因为意图是显示警告但仍然允许用户提交他们想要的任何一天。

到目前为止,我发现了ajax,但错误的日期。我认为它是在页面加载时抓取日期而不是在点击日历日时,所以我猜测datepicker('getDate')正在加载时进行评估。如何构建它以动态评估?这是当前版本(在coffeescript中):

jQuery ->
  $("#rescheduler").click ->
    $("td[data-handler='selectDay'] a").click ->
      id = getUrlVars()["booking_id"]
      newDate = new Date(datepicker.datepicker('getDate'))
      postData = {}
      postData['booking_id'] = id
      postData['date'] = newDate
      $.post '/path/to/check_stuff', postData, ((data) -> doStuff), "json"

或者,如果您更喜欢原生的javaScript:

jQuery(function() {
  return $("#rescheduler").click(function() {
    return $("td[data-handler='selectDay'] a").click(function() {
      var id, newDate, postData;
      id = getUrlVars()["booking_id"];
      newDate = new Date(datepicker.datepicker('getDate'));
      postData = {};
      postData['booking_id'] = id;
      postData['date'] = newDate;
      return $.post('/path/to/check_stuff', postData, (function(data) {
        return doStuff;
      }), "json");
    });
  });
});

1 个答案:

答案 0 :(得分:0)

我怀疑发生的事情是日期选择器将日期设置为2014年3月2日,但这被设置为UTC时间,因此值类似于2014年3月2日00:00:00。然后,当您从传入的值创建新日期时,您的时区会添加到混合中,从而导致日期显示为关闭。

如果是这样(尝试记录某些值以查看您正在使用的内容),那么您需要修改日期选择器值以考虑时区。

类似的东西:

    localDate       = new Date(dateToFix); //dateToFix would be the value from the date picker
    localTime       = localDate.getTime();
    localOffset     = localDate.getTimezoneOffset() * 60000;
    adjustedDate    = new Date(localTime + localOffset);