一般来说,我对 jQuery 和 javascript 比较陌生;我知识渊博,可以编写基本脚本,但我可以通过一些帮助来优化我的一些代码,这些代码对我来说似乎效率不高,但我不知道改变它的最佳方法。
我有两个 input type='time' 表单域和一个隐藏的表单域,用于保存两个域之间的差异。
这是我的代码:
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() 是更新持续时间值的最佳方法,但我不确定最佳解决方案是什么。我知道并非所有浏览器都支持 input type='time' 但目前 Chrome 和 Safari 是我们的主要关注点,它们都支持它。
我考虑过可能使用 .keyup() 仅在用户完成输入时间后计算持续时间,但 Chrome 和 Safari 都提供了单击箭头以增加/减少时间的选项,因此您可以通过几种方式输入数据。另外,我知道这将在平板电脑上使用,我不确定他们用来选择时间的时间刻度盘是否算作点击或按键。
每次进行更改时调用该函数似乎效率很低,例如,单击并按住按钮以将分钟计数器从 01 增加到 59 并让它在其间的每个间隔调用该函数作为正常使用的一部分行为。
我不知道对此的最佳解决方案是什么。有没有人有什么建议?