我正在使用jQuery-ui datepicker和JörnZaefferer的validate插件。
众所周知,在日期选择器更改输入字段的内容后,验证不会自动触发。
我感到好奇的是,当点击年份下拉列表,点击月份下拉列表以及点击日期时,验证会触发。并且,在这些情况中都没有改变输入字段的值。你可以在这里试试:http://jsfiddle.net/ECku3/12/有一些console.log事件显示调用验证方法的时间,以及调用$.validator.showErrors()
时验证字段的值。
我想找到一种在datepicker具有焦点时阻止验证的方法。但是,当用户键入日期而不是使用datepicker时,我不想阻止验证。所以我不能只设置$.validator.settings.onfocusout = false
。
想法?
答案 0 :(得分:1)
我使用了jquery.ui.datepicker.validation.js插件,如下所示:
$(document).ready(function() {
$.datepicker.setDefaults({
dateFormat: 'yy-mm-dd',
firstDay: 1,
showOn: 'button',
changeMonth: true,
changeYear: true,
});
$("#mydate").datepicker();
$('#myform').validate({
errorPlacement: $.datepicker.errorPlacement,
rules: {
mydate: {
required: true,
dpDate: function(){traceBack(); return true;},
dpCompareDate: 'notBefore 2011-01-01'
}
},
messages: {
mydate: 'Please enter a valid date (yyyy-mm-dd) after 2011-01-01'
}});
function traceBack() {
console.log("Firing?");
}
});
修改强>
如果您真的不希望在datepicker小部件中导航时触发任何验证事件,则可以在datepicker小部件可见时关闭onfocusout设置:
$(document).ready(function() {
$.datepicker.setDefaults({
dateFormat: 'yy-mm-dd',
firstDay: 1,
showOn: 'button',
changeMonth: true,
changeYear: true,
beforeShow: function () {$("#myform").validate().settings.onfocusout = false; },
onClose: function () {$("#myform").validate().settings.onfocusout = true;}
});
$("#mydate").datepicker();
$('#myform').validate({
errorPlacement: $.datepicker.errorPlacement,
rules: {
mydate: {
required: true,
dpDate: function(){traceBack(); return true;},
dpCompareDate: 'notBefore 2011-01-01'
}
},
messages: {
mydate: 'Please enter a valid date (yyyy-mm-dd) after 2011-01-01'
}});
function traceBack() {
console.log("Firing?");
}
});