【发布时间】:2015-01-29 21:13:48
【问题描述】:
我有一个表单,用户可以在其中添加 X 行,每行都有一个开始时间和结束时间输入。
行可以随意添加,时间不必按顺序输入,但提交表单时不能冲突。
到目前为止,我能够检查冲突,使用几个 for 循环并检查每个开始和结束时间与其余时间。
我面临的问题是,很明显,如果第 1 行和第 2 行冲突,我的代码会记录两个冲突(逻辑上正确!)
我只想展示第一个冲突,因为一旦解决了,自然就是第二个冲突了。
我的代码:
$('form').submit(function(event){
event.preventDefault();
var errors = [];
var data = serializedToObject($(this).serializeArray());
for(var i = data.row.length; i--;) {
for(var s = data.start.length; s--;) {
if(s != i) {
if(data.start[i] < data.end[s] && data.start[s] < data.end[i]) {
errors.push('Conflict between ' + data.row[i] + ' and ' + data.row[s]);
}
}
}
}
if(errors.length === 0) {
this.submit();
} else {
console.log(errors);
}
});
(serializedToObject 只是将表单数据转换为对象)
那么如何让我的代码只将 1 个冲突推送到数组?
我尝试将行 ID 添加到对象并将其推送到数组,但它不会在稍后记录其他冲突,例如第 1 行与第 2 行和第 4 行冲突,第 1 行和第 4 行之间的冲突不再赘述,因为第 1 行已经在数组中。
【问题讨论】:
-
data.row 是一个包含每一行输入的对象,data.start 是开始日期,data.end 是结束日期(在对象中输入)?
标签: javascript jquery