Ruby/Rails:如何修改datetime_field仅允许选择15分钟倍数的分钟值?
实现DateTime字段仅显示15分钟间隔的时间选项(无需后端验证)
直接用HTML5原生属性就能搞定,不用写后端验证,也不用复杂插件。
最简单的方法是给Rails的
datetime_field加step: 900参数(15分钟等于900秒):<%= form.label :time, style: "display: block" %> <%= form.datetime_field :time, step: 900 %>浏览器的时间选择器会直接只显示分钟为0、15、30、45的选项,用户根本选不了其他分钟数,从输入源头就限制死了。
如果担心部分旧浏览器不支持HTML5的
step属性,再加一段简单JS做兜底:document.addEventListener('DOMContentLoaded', function() { // 替换成你实际的输入框name,比如模型是Event的话就是event[time] const timeInput = document.querySelector('[name="your_model[time]"]'); timeInput.addEventListener('change', function(e) { const selectedTime = new Date(e.target.value); let minutes = selectedTime.getMinutes(); // 把分钟四舍五入到最近的15分钟间隔 const roundedMinutes = Math.round(minutes / 15) * 15; selectedTime.setMinutes(roundedMinutes); // 处理分钟凑整到60的情况,自动进1小时 if (roundedMinutes === 60) { selectedTime.setHours(selectedTime.getHours() + 1); selectedTime.setMinutes(0); } // 转成datetime-local要求的格式(YYYY-MM-DDTHH:mm) e.target.value = selectedTime.toISOString().slice(0, 16); }); });
两种方法都是从前端直接限制输入,不用在后端写验证逻辑,用户选不出不符合要求的时间。
内容的提问来源于stack exchange,提问作者Santiago Cueva
相关产品推荐
相关产品推荐

