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

Angular datetimepicker联动需求:选出发日期后唤起返程日期选择器

解决方案

针对你的需求,我们可以通过在出发日期选择完成后的回调里判断返程日期状态,自动触发返程日期选择器的唤起,具体步骤如下:

1. 给返程日期输入框添加标识

首先修改HTML,给返程日期的input标签加上id,方便后续在控制器中定位元素:

<div class="form-group" ng-if="!Unavailable">
    <label class="col-sm-2 control-label">*{{'DepartureDate'|translate}}</label>

    <div class="col-sm-3" ng-if="isShowdatepicker">
        <input class="form-control" type="text" date-picker="" min="{{datepickerMin}}" ng-model="book.Departure" ng-change="showDate()" required/>
    </div>
    <div class="col-sm-1"></div>
    <div ng-if="book.FlightType=='RT'">
        <label class="col-sm-1 control-label" style="text-align: left">*{{'ReturnDate'|translate}}</label>

        <div class="col-sm-3" ng-if="isShowdatepicker">
            <!-- 添加id用于定位元素 -->
            <input id="returnDatePicker" class="form-control" type="text" date-picker="" min="{{datepickerMin}}" ng-model="book.Return" required/>
        </div>
    </div>
</div>

2. 修改控制器中的showDate方法

在你的AngularJS控制器里,调整showDate函数,加入判断和触发逻辑:

// 记得在控制器中注入$timeout服务
app.controller('YourController', ['$scope', '$timeout', function($scope, $timeout) {
    $scope.showDate = function() {
        // 仅在往返航班(RT)且返程日期未填写时触发
        if ($scope.book.FlightType === 'RT' && !$scope.book.Return) {
            // 用$timeout确保DOM已完成渲染(避免ng-if导致元素未加载)
            $timeout(function() {
                var returnInput = document.getElementById('returnDatePicker');
                if (returnInput) {
                    // 触发输入框焦点事件,多数日期选择器会在焦点时弹出界面
                    returnInput.focus();

                    // 如果focus不生效,尝试调用date-picker指令的内部方法(需看指令实现)
                    // 示例:如果指令暴露了open方法,可通过angular.element调用
                    // var returnPickerEl = angular.element(returnInput);
                    // returnPickerEl.controller('datePicker').open();
                }
            });
        }
    };
}]);

注意事项

  • 如果你的date-picker是自定义指令,且有特定的唤起方法(比如内部的open函数),请替换成指令对应的调用方式,上面的代码提供了两种常见方案。
  • 必须注入$timeout服务,因为ng-if会延迟DOM渲染,直接获取元素可能会返回null,$timeout会让代码在DOM更新周期后执行。

内容的提问来源于stack exchange,提问作者Hồng Quân

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:17:29