关于重构jQuery持续时间计算的建议
Advice on refactoring jQuery time duration calculation
一般来说,我对jQuery和javascript相对陌生;我有足够的知识来编写基本的脚本,但我可以在一些帮助下优化我的一些代码,这对我来说似乎并不有效,但我不知道修改它的最佳方法。
我有两个输入类型为"时间"的表单字段和一个隐藏的表单字段,用于保存两个字段之间的差异。
这是我的代码:
function timeDifference(field1, field2) {
var field1val = $(field1).val();
var field2val = $(field2).val();
if ((field1val !== '--:--') && (field2val !== '--:--')) {
var hours = field1val.split(':')[0] - field2val.split(':')[0];
var minutes = field1val.split(':')[1] - field2val.split(':')[1];
minutes = minutes.toString().length<2?'0'+minutes:minutes;
if(minutes<0){
hours--;
minutes = 60 + minutes;
}
hours = hours.toString().length<2?'0'+hours:hours;
var difference = hours + ':' + minutes;
return difference;
} else return false;
};
$('#assessmentHeaderStartTime, #assessmentHeaderEndTime').change(function() {
var duration = timeDifference('#assessmentHeaderStartTime','#assessmentHeaderEndTime');
$('#assessmentHeaderDuration').val(duration);
});
我怀疑.change()是否是更新持续时间值的最佳方法,但我不确定什么是最佳解决方案。我知道不是所有浏览器都支持inputtype='time',但目前Chrome&Safari是我们的主要关注点,两者都支持它。
我曾考虑过使用.keyup()只计算用户在一段时间内完成键入后的持续时间,但Chrome&Safari都提供了单击箭头来增加/减少时间的选项,因此您可以通过几种方式输入数据。另外,我知道这将在平板电脑上使用,我不确定他们用来选择时间的时间刻度盘是算作点击还是按键。
每次更改时调用该函数似乎效率很低,例如,用户可以点击并按住按钮将分钟计数器从01增加到59,并让它在其间的每个间隔调用该函数,作为正常使用行为的一部分。
我不知道这个问题的最佳解决方案是什么。有人有什么建议吗?
您确定如果单击向上箭头会调用change
事件吗?从我进行的一次快速测试来看,情况并非如此。
如果更改事件触发过多,我建议使用onBlur
,但看起来您所拥有的代码将完全按照您想要的方式运行。有关onBlur
和onChange
之间差异的更多详细信息,请参阅此问题。
相关文章:
- 在jQuery中,短距离长持续时间的精细字体大小动画
- 创建一个倒计时计时器脚本,该脚本计算声音文件的持续时间,而不是特定的日期
- 输入视频文件时获取视频持续时间
- 无填充的滚动魔术持续时间
- 我需要在每5秒内调用一个函数,并重置持续时间
- jQuery动画的持续时间就像一个延迟
- 如何在特定时间重新加载page.php,例如:07:45.非持续时间,例如:每5秒
- 如何在dhtmlxgantt中显示灯箱中的开始日期、结束日期和持续时间
- angularjs计算开始时间和当前时间之间的时间差
- Javascript - 具有音高和持续时间控制的文本到语音
- 当用户在文本框中输入日期时,如何计算一年的持续时间
- JS-鼠标点击的计算持续时间
- 计算给定所需起始速度的 GSAP 缓和补间持续时间
- 如何使用 HTML5 音频计算一组曲目的总持续时间
- 关于重构jQuery持续时间计算的建议
- 如何计算网络中的确切流媒体持续时间
- 计算内存游戏的持续时间并将其发送到数据库
- 计算1个周期的持续时间
- 我如何从表中计算谷歌应用程序脚本的持续时间
- 使用googlegeolocation数组中的坐标和从开始到结束的持续时间来计算速度