【发布时间】:2018-06-29 16:00:20
【问题描述】:
日期输入字段无效,第一次选择日期时。
它显示必需的错误消息,因为字段有一个空值(检查控制台日志)。但该字段将在第二次更改时有效。
注意:一个原因是日期输入字段在选择日期时失去焦点(点击事件)。但是只有在点击事件发生时才会填充日期。但是验证器将验证焦点事件的字段。
我正在使用Jquery Validation 验证表单,使用bootstrap-datepicker 作为小部件。
^^for Better UX Run code sn-p on full-page ;) 要么 jsfiddle
来自@Sparky / @Vignesh 回答:是的,这是一种解决方法,我们可以使用 change/hide/changeDate(module attribute) 事件处理程序。一旦设置了输入值,它就会被触发。 但问题是,每当我们从年->月->日期中选择时,每次点击选择器时,都会从输入中移除焦点,并触发 focusout 事件并显示错误消息,直到选择日期。
它不像选择字段那样平坦。在选择字段中,在从字段小部件中选择选项之前不会触发焦点事件。像这样,我们如何在不看到错误消息的情况下移动年/月/日选项?。
jQuery: & HTML
$(function() {
$("#editEventForm").validate({
rules: {
full_name: {
required: true,
},
event_date: {
required: true,
},
},
messages: {
full_name: "Please enter your full name!",
event_date: "Please enter valid date!",
},
highlight: function(element, errorClass) {
var e = $(element);
e.closest('.has-feedback').removeClass('has-success').addClass('has-error');
},
unhighlight: function(element, errorClass) {
var e = $(element);
e.closest('.has-feedback').removeClass('has-error').addClass('has-success');
},
onfocusout: function(element) {
console.log("element value --> ", $(element).val());
return $(element).valid();
},
});
$('#eventDate').datepicker({
autoclose: true,
}).on('change', function() {
$(this).valid(); // triggers a validation test
// $(this) refers to $('#eventDate')
});
});
.has-error :focus {
border-color: #f84545 !important;
}
.error {
color: #f84545;
}
<link id="bs-css" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
<link id="bsdp-css" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery-validation@1.17.0/dist/jquery.validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.7.1/js/bootstrap-datepicker.min.js"></script>
<form id="editEventForm">
<div class="form-group">
<div class="has-feedback">
<label for="eventDate">Full Name * </label>
<input class="form-control" id="fullName" name="full_name" type="text">
</div>
<div class="has-feedback">
<label for="eventDate">Event Date * </label>
<input class="form-control" id="eventDate" name="event_date" placeholder="MM/DD/YYYY" type="text">
</div>
</div>
<input type="submit" value="ClickMe">
</form>
【问题讨论】:
-
@Sparky 是的,我已经完成了。但是我们怎样才能在不触发错误消息的情况下移动年/月/日选项呢?
-
@ramganesh 更新了我的答案。请看一下。
标签: javascript jquery-validate bootstrap-datepicker