jQuery validate插件:重定向用户,如果任何特定条件无效
jQuery validate plugin: redirect user if any particular condition is invalidated
我在一个表单上使用'jQuery验证'插件,它接受出生日期作为输入从3个独立的字段[月],[日]和[年]。我需要重定向用户到另一个url,如果他/她的年龄小于21。我在互联网上寻找可能的解决方案,并提出了一个决定,用插件的'submitHandler'方法来处理这个场景。
添加submitHandler方法以及我的自定义方法后的新问题是,它已经停止验证其他日期范围。尽管当年龄小于21岁时,它会完美地重定向用户。
我的代码如下:$.validator.addMethod("ageGateValidBirthdate", function (value, element) {
var month = parseInt($('.age-gate-month').val(), 10);
var day = parseInt($('.age-gate-day').val(), 10);
var year = parseInt($('.age-gate-year').val(), 10);
var userdate = new Date(year, month - 1, day);
var CurrentDate = new Date();
var flag = null;
var validDate = false;
var userDateInSeconds = userdate.getTime();
var currentDateCompareVar = new Date();
currentDateCompareVar.setTime(userDateInSeconds);
if (CurrentDate > userdate && currentDateCompareVar.getFullYear() === year && currentDateCompareVar.getMonth() + 1 === month && currentDateCompareVar.getDate() === day) {
validDate = true;
}
if (validDate && year > 1900) {
flag = true;
$('.age-gate-month, .age-gate-day, .age-gate-year').removeClass('error');
}
else {
flag = false;
}
return flag;
}, "Enter correct birthdate");
$ageGatePage.on('submit', function (e) {
e.preventDefault();
jQuery.validator.addClassRules({
"age-gate-month": {
required: true,
number: true,
minlength: 1,
maxlength: 2,
range: [1, 12],
ageGateValidBirthdate: true
},
"age-gate-day": {
required: true,
number: true,
minlength: 1,
maxlength: 2,
range: [1, 31],
ageGateValidBirthdate: true
},
"age-gate-year": {
required: true,
number: true,
minlength: 4,
maxlength: 4
}
});
$ageGatePage.valid();
});
$ageGatePage.validate({
groups: {
dob: "month_of_birth day_of_birth year_of_birth"
},
messages: {
//messages here
},
errorPlacement: function (error, element) {
error.appendTo(element.parents(".age-gate-birth-date"));
},
submitHandler: function (form) {
var month = parseInt($('.age-gate-month').val(), 10); // Convert to numbers with "+" prefix
var day = parseInt($('.age-gate-day').val(), 10);
var year = parseInt($('.age-gate-year').val(), 10);
if (!(month > 0 && month < 13 && year > 0 && year < 32768 && day > 0 && day <= (new Date(year, month, 0))))
return false;
var userdate = new Date(year, month - 1, day); // Use the proper constructor
var CurrentDate = new Date();
var flag = null;
var age = Math.floor((CurrentDate - userdate) / (365.25 * 24 * 60 * 60 * 1000));
var ageGateFlag = age >= 21 ? true : false;
if (ageGateFlag) {
flag = true;
form.submit();
}
else {
flag = false;
window.location.href = "http://domain.com/";
return flag;
}
return flag;
}
});
我刚刚得到这个问题,把它贴在这里供进一步参考。是submitHandler中的日验证造成了混乱。按照下面的方式修改代码可以达到目的。
if (!(month > 0 && month < 13 && year > 0 && year < 32768 && day > 0 && day <= (new Date(year, month, 0))))
return false;
if (!(month > 0 && month < 13 && year > 0 && year < 32768 && day > 0 && day <= 31))
return false;
尝试了一些使用invalidHandler的解决方案,但没有成功。如果有人能给出一个更好的答案,我将不胜感激。
相关文章:
- 如何在jquery中检测浏览器的后退按钮,如果有任何对话框打开,请关闭它
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- 如果同一页面上有多个谷歌地图,单击任何标记都会突出显示最底部的地图标记
- jQuery/Javascript foreach If/Else |如果为空(不执行任何操作)Else(显示forea
- 如果没有从下拉列表中选择任何值,则允许使用php、mysql、javascript将文本框添加到mysql表中
- 如果没有任何输入,如何启用按钮
- 如果用户不关闭弹出窗口'没有提供任何回应
- 如果使用jquery在页面加载时未选择任何选项,如何禁用下拉列表
- 循环遍历所有字段,如果任何一个字段的验证失败jquery,则返回false
- jQuery - 删除表格行(如果任何单元格包含介于 X 和 Y 之间的值)
- 如果任何复选框未选中,如何取消选中所有复选框
- Javascript - 如果任何 2 个选定的下拉列表值相同,如何显示消息框
- 猫鼬模型单元测试 - 如果任何测试用例失败,连接将不会关闭
- 键入.js脚本在iPhone6中不起作用,如果任何单词将在该行完成,在这种情况下,另一个单词不键入,仅显示光标
- 如果任何字段留空,如何在表单中生成错误消息
- 如果任何aui表单字段值发生更改,请启用aui按钮
- 如果任何带有特定类的输入可见且没有值,则不允许单击
- 如果任何整数为负数或大于10,则返回null
- jQuery validate插件:重定向用户,如果任何特定条件无效
- jquery是(“;: focus")在safari中不工作.如果任何解决方案($ ().parents(&