组件:时间选择框

时间选择框组件用于让用户选择时间(时:分:秒),支持通过步长控制可选的秒数粒度(如每60秒一个可选点),并可设置禁用/只读状态、占位提示等。它基于 HTML <input type="time"> 元素封装,适用于预约时间、日程安排、提醒设置等需要精确时间选择的场景。

典型使用场景:

  • 预约系统(选择预约时间、服务时间)
  • 日程管理(设置会议时间、提醒时间)
  • 闹钟设置(选择闹钟时间)
  • 表单中的时间字段(上班时间、营业时间)

📌 继承自视图的成员速查

本组件继承自 视图 类,可直接使用以下属性和方法:

属性: ID、左边、顶边、右边、底边、宽度、高度、背景、背景颜色、背景图像、文本、文本颜色、字体、字体大小、字体粗细、行高、边框、边框圆角、边框宽度、光标样式、显示模式、透明度、外边距、外边距底、外边距左、外边距右、外边距顶、最大高度、最大宽度、最小高度、最小宽度、内边距、内边距底、内边距左、内边距右、内边距顶、定位、CLASS、InnerHTML、OuterHTML、内容水平对齐方式、首行缩进、可视、显示层级、内联样式、禁用

方法: 追加内联样式(样式文本)、置内联样式(名称,值)、取内联样式值(名称)、取Style对象()、添加事件(事件名称, 回调函数)、删除事件(事件名称, 回调函数)、获取焦点()、清除焦点()、添加样式类(类名称)、移除样式类(类名称)、取样式类列表()、取样式类()、执行单击()、取属性值(属性名)、取属性节点(属性名)、取布局参数()、取渲染宽度()、取渲染高度()、取渲染顶边()、取渲染左边()、左侧对齐到(目标组件,偏移量)、右侧对齐到(目标组件,偏移量)、顶边对齐到(目标组件,偏移量)、底边对齐到(目标组件,偏移量)、右侧对齐到左(目标组件, 偏移量)、左侧对齐到右(目标组件, 偏移量)、底边对齐到顶(目标组件, 偏移量)、顶边对齐到底(目标组件, 偏移量)、有指定属性(属性名)、有属性()、内容可编辑()、包含CSS类(类名)、取命名空间()、取下个节点()、取下个元素()、取节点名称()、取节点类型()、取父节点()、取父元素()、取上个节点()、取上个元素()、销毁()、删除属性(属性名)、删除属性节点(属性名)、置属性值(属性名, 属性值)、置属性节点(属性节点)、取标签名()、移动(左边 顶边, 宽度, 高度)、取原生对象()、置被单击回调(回调函数)、置被双击回调(回调函数)、置鼠标被进入回调(回调函数)、置鼠标被移出回调(回调函数)、置鼠标被移动回调(回调函数)、置鼠标被按下回调(回调函数)、置鼠标被抬起回调(回调函数)、置鼠标滚轮被滚动回调(回调函数)、置键盘被按下回调(回调函数)、置按键被抬起回调(回调函数)、置按键被压下回调(回调函数)、置被失去焦点回调(回调函数)、置被获得焦点回调(回调函数)

事件: 被单击(源对象,事件源)、被双击(源对象,事件源)、鼠标被进入(源对象,事件源)、鼠标被移出(源对象,事件源)、鼠标被移动(源对象,事件源)、鼠标被按下(源对象,事件源)、鼠标被抬起(源对象,事件源)、鼠标滚轮被滚动(源对象,事件源)、键盘被按下(源对象,事件源)、按键被抬起(源对象,事件源)、按键被压下(源对象,事件源)、被失去焦点(源对象,事件源)、被获得焦点(源对象,事件源)

💡 完整成员列表及详细说明请参考:视图


常用操作速查

操作属性/方法示例
设置时间值置值(时间字符串)时间选择框1.置值("14:30:00")
获取时间值字符串取值()变量 时间 = 时间选择框1.取值()
获取小时、分钟、秒取小时() / 取分钟() / 取秒()变量 时 = 时间选择框1.取小时()
设置步长(秒级)步长时间选择框1.步长 = 60
禁用/启用组件禁用时间选择框1.禁用 = 真
设置只读状态只读时间选择框1.只读 = 真
设置占位提示占位提示时间选择框1.占位提示 = "请选择时间"
设置选择完成回调置时间选择完毕回调(回调函数)时间选择框1.置时间选择完毕回调((源对象, 时间) => { ... })

样式美化参考

时间选择框的外观可通过继承的视图属性进行调整:

  • 整体容器:通过 宽度高度背景颜色边框(如 "1px solid #d9d9d9")、边框圆角(建议 "6px")等属性美化。
  • 字体样式:通过 字体大小(建议 "14px")、文本颜色 控制显示时间文本的外观。
  • 内边距:使用 内边距(如 "8px 12px")控制输入框内边距。
  • 禁用状态禁用 = 真 时,输入框变灰且不可交互。
  • 只读状态只读 = 真 时,输入框不可编辑但仍可聚焦,且样式可能略有不同(取决于浏览器)。

CSS 美化示例(在项目 CSS 文件中定义):

.my-time-input {
    border: 1px solid #d9d9d9;
    border-radius: 6px;
    padding: 8px 12px;
    font-size: 14px;
    transition: border-color 0.3s;
}
.my-time-input:focus {
    border-color: #1890ff;
    outline: none;
    box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
}
.my-time-input:disabled {
    background-color: #f5f5f5;
    cursor: not-allowed;
}
.my-time-input::placeholder {
    color: #bfbfbf;
}

在代码中应用样式类:时间选择框1.添加样式类("my-time-input")


基础示例

创建一个时间选择框,默认值为 18:30:00,步长为 60 秒(即只能选择整分钟),选择后输出时间。

变量 时间选择框1 = 创建 时间选择框()
时间选择框1.左边 = 50
时间选择框1.顶边 = 50
时间选择框1.宽度 = 160
时间选择框1.高度 = 36
时间选择框1.边框 = "1px solid #d9d9d9"
时间选择框1.边框圆角 = "6px"
时间选择框1.内边距 = "8px 12px"
时间选择框1.字体大小 = "14px"
时间选择框1.置值("18:30:00")
时间选择框1.步长 = 60  ' 每分钟一步

时间选择框1.置时间选择完毕回调((源对象, 时间字符串) => {
    弹出提示("选择的时间:" + 时间字符串)
})

添加组件(时间选择框1)

综合示例:会议预约时间选择

本示例构建一个会议预约表单,包含日期、开始时间、结束时间选择框,以及会议主题输入,提交时校验时间是否合理(开始时间必须早于结束时间)。

' ========== 创建表单容器 ==========
变量 表单容器 = 创建 绝对布局()
表单容器.左边 = 30
表单容器.顶边 = 30
表单容器.宽度 = 400
表单容器.背景颜色 = "#ffffff"
表单容器.边框 = "1px solid #e8e8e8"
表单容器.边框圆角 = "12px"
表单容器.内边距 = "24px"
添加组件(表单容器)

' 标题
变量 标题 = 创建 标签()
标题.文本 = "📅 预约会议"
标题.字体大小 = "20px"
标题.字体粗细 = "bold"
标题.文本颜色 = "#333"
标题.内边距 = "0 0 16px 0"
表单容器.添加组件(标题)

' 会议主题
变量 主题标签 = 创建 标签()
主题标签.文本 = "会议主题"
主题标签.字体大小 = "14px"
主题标签.文本颜色 = "#666"
主题标签.内边距 = "8px 0 4px"
表单容器.添加组件(主题标签)

变量 主题输入 = 创建 单行输入框()
主题输入.宽度 = 352
主题输入.高度 = 36
主题输入.提示文本 = "请输入会议主题"
主题输入.边框 = "1px solid #d9d9d9"
主题输入.边框圆角 = "6px"
主题输入.内边距 = "8px 12px"
表单容器.添加组件(主题输入)

' 开始时间
变量 开始标签 = 创建 标签()
开始标签.文本 = "开始时间"
开始标签.字体大小 = "14px"
开始标签.文本颜色 = "#666"
开始标签.内边距 = "12px 0 4px"
表单容器.添加组件(开始标签)

变量 开始时间框 = 创建 时间选择框()
开始时间框.宽度 = 352
开始时间框.高度 = 36
开始时间框.边框 = "1px solid #d9d9d9"
开始时间框.边框圆角 = "6px"
开始时间框.内边距 = "8px 12px"
开始时间框.字体大小 = "14px"
开始时间框.步长 = 60  ' 整分钟
开始时间框.置值("09:00:00")
开始时间框.占位提示 = "选择开始时间"
表单容器.添加组件(开始时间框)

' 结束时间
变量 结束标签 = 创建 标签()
结束标签.文本 = "结束时间"
结束标签.字体大小 = "14px"
结束标签.文本颜色 = "#666"
结束标签.内边距 = "12px 0 4px"
表单容器.添加组件(结束标签)

变量 结束时间框 = 创建 时间选择框()
结束时间框.宽度 = 352
结束时间框.高度 = 36
结束时间框.边框 = "1px solid #d9d9d9"
结束时间框.边框圆角 = "6px"
结束时间框.内边距 = "8px 12px"
结束时间框.字体大小 = "14px"
结束时间框.步长 = 60
结束时间框.置值("10:00:00")
结束时间框.占位提示 = "选择结束时间"
表单容器.添加组件(结束时间框)

' 提交按钮
变量 提交按钮 = 创建 按钮()
提交按钮.文本 = "预约"
提交按钮.宽度 = 352
提交按钮.高度 = 44
提交按钮.背景颜色 = "#1890ff"
提交按钮.文本颜色 = "#ffffff"
提交按钮.边框圆角 = "6px"
提交按钮.字体大小 = "16px"
提交按钮.内边距 = "16px 0 0"
表单容器.添加组件(提交按钮)

' 错误提示
变量 错误标签 = 创建 标签()
错误标签.文本 = ""
错误标签.字体大小 = "14px"
错误标签.文本颜色 = "#ff4d4f"
错误标签.内边距 = "8px 0 0"
错误标签.可视 = "hidden"
表单容器.添加组件(错误标签)

' ========== 提交校验 ==========
提交按钮.置被单击回调((源对象, 事件对象) => {
    变量 主题 = 删首尾空(主题输入.内容)
    变量 开始 = 开始时间框.取值()
    变量 结束 = 结束时间框.取值()
    
    如果(主题 == "")
        错误标签.文本 = "请输入会议主题"
        错误标签.可视 = "visible"
        主题输入.获取焦点()
        返回
    结束 如果
    如果(开始 == "" 或 结束 == "")
        错误标签.文本 = "请选择完整的时间"
        错误标签.可视 = "visible"
        返回
    结束 如果
    
    ' 比较时间(简单字符串比较,格式 HH:mm:ss 可直接比较)
    如果(开始 >= 结束)
        错误标签.文本 = "结束时间必须晚于开始时间"
        错误标签.可视 = "visible"
        返回
    结束 如果
    
    错误标签.可视 = "hidden"
    弹出提示("预约成功!会议:" + 主题 + " 从 " + 开始 + " 到 " + 结束)
    
    ' 清空表单(模拟提交后重置)
    主题输入.内容 = ""
    开始时间框.置值("09:00:00")
    结束时间框.置值("10:00:00")
})

' ========== 当时间改变时,隐藏错误提示 ==========
开始时间框.置时间选择完毕回调((源对象, 时间字符串) => {
    错误标签.可视 = "hidden"
})

结束时间框.置时间选择完毕回调((源对象, 时间字符串) => {
    错误标签.可视 = "hidden"
})

属性详解

禁用

  • 类型: 逻辑型
  • 说明: 设置或获取是否禁用组件。禁用后,用户无法点击输入框或通过键盘修改时间,样式变灰(由浏览器控制)。默认

只读

  • 类型: 逻辑型
  • 说明: 设置或获取是否为只读模式。只读模式下,用户可以看到时间值,但无法修改(输入框不可编辑)。与禁用的区别在于,只读状态样式通常不变(非灰色),且输入框仍然可以获得焦点。默认

步长

  • 类型: 数值型
  • 说明: 设置或获取秒级步长,决定了时间选择器在分钟或秒上的粒度。常用取值:
    • 1:秒级步长,用户可精确到秒。
    • 60:分钟级步长,秒数固定为 00。
    • 3600:小时级步长,分钟和秒固定为 00。 默认 60(分钟级)。此属性影响用户点击增减按钮或拖动时的变化量,也限制可选时间点。

占位提示

  • 类型: 文本型
  • 说明: 设置或获取输入框为空时显示的占位提示文本,如 "请选择时间"。当用户选择时间后,占位文本消失。

函数详解

置值(时间字符串)

  • 功能: 设置时间选择框的当前值。
  • 参数: 时间字符串,格式必须为 HH:mmHH:mm:ss(24小时制),例如 "14:30""14:30:00"。若省略秒部分,默认为 00
  • 返回值: 无。
  • 示例: 时间选择框1.置值("08:30:00")

取值()

  • 功能: 获取当前选择的时间字符串,格式固定为 HH:mm:ss(24小时制)。
  • 返回值: 文本型,如 "14:30:00";若未选择任何时间,返回空字符串 ""
  • 示例: 变量 时间 = 时间选择框1.取值()

取小时()

  • 功能: 获取当前时间的小时部分(0~23)。
  • 返回值: 数值型,若未选择时间返回 -10(浏览器行为不同,建议先判断 取值() 是否为空)。
  • 示例: 变量 时 = 时间选择框1.取小时()

取分钟()

  • 功能: 获取当前时间的分钟部分(0~59)。
  • 返回值: 数值型。
  • 示例: 变量 分 = 时间选择框1.取分钟()

取秒()

  • 功能: 获取当前时间的秒部分(0~59)。
  • 返回值: 数值型。
  • 示例: 变量 秒 = 时间选择框1.取秒()

置时间选择完毕回调(回调函数)

  • 功能: 设置当用户完成时间选择(即输入框失去焦点或用户按回车确认)时的回调函数。
  • 参数: 回调函数,格式为 (源对象, 时间字符串) => { ... }
    • 源对象:时间选择框组件本身。
    • 时间字符串:当前选择的时间(格式 HH:mm:ss)。
  • 返回值: 无。
  • 示例:
    时间选择框1.置时间选择完毕回调((源对象, 时间) => {
        调试输出("选择了时间:" + 时间)
    })
    

事件说明

时间选择完毕(源对象, 时间字符串)

  • 功能:置时间选择完毕回调 等效,适用于设计文件(.spldg)中定义的组件。
  • 示例:
    事件 时间选择框1.时间选择完毕(源对象, 时间字符串)
        调试输出("时间:" + 时间字符串)
    结束 事件
    

⚠️ 注意事项

  1. 时间格式置值 接受 HH:mmHH:mm:ss,但 取值() 始终返回 HH:mm:ss 格式。建议统一使用 HH:mm:ss 以避免混淆。
  2. 步长的实际效果步长 控制秒级步进,例如步长=60 时,用户只能选择 00:00、00:01、... 但实际上对分钟选择更常用。浏览器可能对步长的支持有限,建议测试目标浏览器。
  3. 禁用与只读的区别禁用 完全禁用输入,样式变灰;只读 允许用户聚焦但无法修改,样式不变。可根据需求选择。
  4. 占位提示显示:仅当输入框为空时显示占位文本,一旦选择时间,占位文本消失。
  5. 获取时间组成部分取小时()取分钟()取秒() 在未选择时间时可能返回 0-1,建议先通过 取值() 判断是否为空。
  6. 浏览器兼容性:时间选择框基于 <input type="time">,在大多数现代浏览器(Chrome、Firefox、Edge、Safari)中支持良好,但 UI 风格因浏览器而异。
  7. 回调触发时机置时间选择完毕回调 在用户通过点击确认或失去焦点时触发。若用户清空输入框(删除所有字符),也可能触发回调(此时时间字符串为空)。
  8. 设置时间值后触发回调:通过 置值 设置时间也会触发回调(如果值确实改变了)。注意避免在回调中再次设置值导致循环。

相关文档

  • 文档框架基础类_视图 —— 视图类提供的所有通用属性和方法
  • 文档其它通用类组件_数字输入框 —— 类似步长控制
  • 文档其它通用类组件_日期选择框 —— 日期选择组件
  • 文档轻语言网站:轻语言语法速查 —— 拉姆达表达式、条件判断等
  • 文档综合演示:会议预约表单 —— 实际应用示例