You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

日期选择控件onchange函数失效问题咨询(附Moment.js代码)

问题排查与修复

你的代码里有两个核心问题导致change事件逻辑失效:

  • 错误的日期值获取方式:在初始代码和change事件中,你用$ctrl_DateRequested.val(moment().format('YYYY-MM-DD'))给moment传值,但val()传参数时是设置输入框的值,返回的是jQuery对象而非日期字符串,moment解析对象会得到无效日期,后续计算自然出错。
  • change事件强制覆盖用户输入:事件里的$ctrl_DateRequested.val(moment().format('YYYY-MM-DD'))会把用户刚修改的日期强行改回当前日期,既不符合需求,也让用户的修改操作失去意义。

修复后的代码如下:

// 初始化:设置当前日期,并计算加10天的日期
var currentDate = moment().format('YYYY-MM-DD');
$ctrl_DateRequested.val(currentDate);
var plusDate = moment(currentDate).add(10, 'days').format('DD/MM/YYYY');
$ctrl_ValidityDate.val(plusDate);
$ctrl_ReturnDate.val(plusDate);

// 日期变更事件处理
$ctrl_DateRequested.change(function (){
  // 获取用户修改后的日期值
  var selectedDate = $(this).val();
  // 校验日期有效性,避免非法输入导致错误
  if (moment(selectedDate, 'YYYY-MM-DD').isValid()) {
    var newPlusDate = moment(selectedDate).add(10, 'days').format('DD/MM/YYYY');
    $ctrl_ValidityDate.val(newPlusDate);
    $ctrl_ReturnDate.val(newPlusDate);
  }
});

关键修正说明:

  1. 初始化时拆分操作,先获取当前日期字符串,再分别设置输入框和计算目标日期,避免链式调用导致的对象混淆。
  2. change事件中通过$(this).val()获取用户实际修改的日期,不再覆盖用户输入。
  3. 增加日期有效性校验,防止非法输入引发计算错误。

内容的提问来源于stack exchange,提问作者tafreets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:55:54