gpt4 book ai didi

javascript - jQuery 验证日期范围问题

转载 作者:搜寻专家 更新时间:2023-11-01 04:25:24 24 4
gpt4 key购买 nike

我的代码中有很多地方有成对的相关开始和结束日期字段(范围)。我需要验证开始日期是否在结束日期之前。我正在使用 jQuery 验证插件。

这是我的代码: http://jsfiddle.net/jinglesthula/dESz2/

标记:

<form id="myform">
<input type="text" name="startDate" id="startDate" class="validDate" />
<br/>
<input type="text" name="endDate" id="endDate" class="validDate" />
<br/>
<input type="submit" />
</form>

js:

$(function() {
// simple date mm/dd/yyyy format
$.validator.addMethod('validDate', function(value, element) {
return this.optional(element) || /^(0?[1-9]|1[012])[ /](0?[1-9]|[12][0-9]|3[01])[ /][0-9]{4}$/.test(value);
}, 'Please provide a date in the mm/dd/yyyy format');

$.validator.addMethod('dateBefore', function(value, element, params) {
// if end date is valid, validate it as well
var end = $(params);
if (!end.data('validation.running')) {
$(element).data('validation.running', true);
this.element(end);
$(element).data('validation.running', false);
}
return this.optional(element) || this.optional(end[0]) || new Date(value) < new Date(end.val());

}, 'Must be before corresponding end date');

$.validator.addMethod('dateAfter', function(value, element, params) {
// if start date is valid, validate it as well
var start = $(params);
if (!start.data('validation.running')) {
$(element).data('validation.running', true);
this.element(start);
$(element).data('validation.running', false);
}
return this.optional(element) || this.optional(start[0]) || new Date(value) > new Date($(params).val());

}, 'Must be after corresponding start date');
$('#myform').validate({ // initialize the plugin
rules: {
startDate: {dateBefore: '#endDate', required: true},
endDate: {dateAfter: '#startDate', required: true}
},
submitHandler: function (form) { // for demo
alert('valid form submitted'); // for demo
return false; // for demo
}
});
});

我想这样做,以便每当一个日期字段更改时,我都会进行检查以确保范围有效(例如开始 < 结束)。

我遇到的是,如果我输入一个有效范围,然后将结束日期的年份更改为开始日期年份的前一年,它将清除开始日期的错误,但不会清除结束日期字段上的错误。我已经调试并进入 dateAfter 方法并看到它返回 true!我什至可以(无需进一步修改字段值)点击提交按钮,然后错误清除并提交表单。

知道为什么它没有清​​除它吗?

编辑 为了进一步阐明我要重现的步骤:

  1. 在开始字段(第一个)中输入 01/01/2014
  2. 在结束字段中输入 01/01/2015
  3. 在结束字段年将 5 更改为 3
  4. 选择 3 并再次输入 5
  5. start 字段清除了它的错误,但 end 仍然提示范围开始/结束
  6. 单击或跳出以模糊结束字段 - 仍然没有清除错误
  7. 点击结束字段
  8. Shift+Tab回到起始字段
  9. end field now (finally) 清除错误消息(您也可以提交表单以查看它清除了 end field 错误)
  10. 哇? 0 wai ??!!!!??!??!!!111!!!one!!!!11!!!1!!!

最佳答案

啊,想通了(或者至少解决了问题)。验证插件可能未设计为允许在给定字段方法的运行中验证第二个字段。可能存在对当前正在验证的字段的内部引用,因此您需要连续进行验证而不是重叠验证。

我在此处添加了对 fiddle 的更新,您可以看到使用 setTimeout 确保“其他字段”在第一个确实解决问题后验证:http://jsfiddle.net/jinglesthula/dESz2/3/

this.element(end);

成为

setTimeout($.proxy(
function () {
this.element(end);
}, this), 0);

我还添加了一个 setTimeout 用于清除“validation.running”标志,以确保它在“其他”字段验证之前不会被清除。

关于javascript - jQuery 验证日期范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22107742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com