Jquery 如何防止在使用模糊功能后在字段中填充onselect日期
我有一个模糊函数,可以通过日期选择器检查两个日期。如果结束日期早于开始日期,则会发出错误警报,并且无法在输入字段中填写所选日期。首先触发模糊事件:Jquery 如何防止在使用模糊功能后在字段中填充onselect日期,jquery,datepicker,blur,Jquery,Datepicker,Blur,我有一个模糊函数,可以通过日期选择器检查两个日期。如果结束日期早于开始日期,则会发出错误警报,并且无法在输入字段中填写所选日期。首先触发模糊事件: ...date picker onSelect: function() { this.focus(); }, onClose: function() { this.blur(); } …验证零件 jQuery("#p_stdy_edate").blur(function() { var stdy_bdate = jQuer
...date picker
onSelect: function() {
this.focus();
},
onClose: function() {
this.blur();
}
…验证零件
jQuery("#p_stdy_edate").blur(function() {
var stdy_bdate = jQuery("#p_stdy_sdate").val();
var stdy_edate = jQuery("#p_stdy_edate").val();
if (stdy_edate < stdy_bdate) {
alert("End date should be later than begin date");
}
});
jQuery(“#p#stdy_edate”).blur(函数(){
var stdy_bdate=jQuery(“#p#stdy_sdate”).val();
var stdy_edate=jQuery(“#p stdy_edate”).val();
if(标准日期<标准日期){
警报(“结束日期应晚于开始日期”);
}
});
但是,当我选择一个无效的结束日期(结束日期输入框有一个默认日期)时,在显示警报后,无效日期将填充到输入字段中。如何修复它?在显示警报后,您可以强制edate的值为无效输入之前的值;例如:
jQuery("#p_stdy_edate").blur(function() {
var stdy_bdate = jQuery("#p_stdy_sdate").val();
var stdy_edate = jQuery("#p_stdy_edate").val();
if (stdy_edate < stdy_bdate) {
alert("End date should be later than begin date");
$("#p_stdy_edate").val("Please Select Ending Date");
}
});
jQuery(“#p#stdy_edate”).blur(函数(){
var stdy_bdate=jQuery(“#p#stdy_sdate”).val();
var stdy_edate=jQuery(“#p stdy_edate”).val();
if(标准日期<标准日期){
警报(“结束日期应晚于开始日期”);
$(“#p#stdy_edate”).val(“请选择结束日期”);
}
});
如果“请选择结束日期”是您的默认值,您当然可以修改它;我也会使用聚焦输出作为事件,而不是模糊(以这种方式使用模糊会导致我的经验出现误报);使用focusout和验证可能会更好(特别是,如果您动态设置值,您希望用户的焦点触发验证,而不是在您以编程方式更改值时)
--编辑;让改变事件变得更加容易;请测试以下代码:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css" integrity="sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.css" />
<title>Ilan's Test</title>
</head>
<body>
<div class="container">
<div class="row">
<div class='col-sm-12'>
<div class="form-group">
Start Date : <input id="sdate" class="form-control" type="text" /><br />
End Date : <input id="edate" class="form-control" type="text" /><br />
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js" integrity="sha384-o+RDsa0aLu++PJvFqy8fFScvbHFLtbvScb8AjopnFD+iEQ7wo/CG0xlczd+2O/em" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/js/bootstrap-datepicker.min.js"></script>
<script type="text/javascript">
$(function(){
$('#sdate').datepicker({
dateFormat: 'dd-mm-yy',
altField: '#thealtdate',
altFormat: 'yy-mm-dd'
});
$('#edate').datepicker({
dateFormat: 'dd-mm-yy',
altField: '#thealtdate',
altFormat: 'yy-mm-dd'
});
$('#edate').on('change',function () {
var sdate = $('#sdate').val();
var edate = $('#edate').val();
var diff = new Date(new Date(edate) - new Date(sdate));
var days = diff/1000/60/60/24;
if(days < 0){
alert("Sorry! You must pick an end date that is greater!");
$('#edate').val('');
} else {
alert ("This date range is good! Your start date and end dates are " + days + " days apart!");
}
return false;
});
});
</script>
</body>
</html>
宜兰试验
开始日期:
结束日期:
$(函数(){
$('sdate')。日期选择器({
日期格式:“dd-mm-yy”,
altField:“#截止日期”,
altFormat:'年-月-日'
});
$('#edate')。日期选择器({
日期格式:“dd-mm-yy”,
altField:“#截止日期”,
altFormat:'年-月-日'
});
$('#edate')。on('change',function(){
var sdate=$('#sdate').val();
var-edate=$('#edate').val();
var diff=新日期(新日期(edate)-新日期(sdate));
var天数=差异/1000/60/60/24;
如果(天数<0){
警报(“对不起!您必须选择一个更大的结束日期!”);
$('#edate').val('');
}否则{
警报(“此日期范围正确!开始日期和结束日期相隔“+天+”天!”);
}
返回false;
});
});
您能给我一个关于使用focusout处理日期范围检查的简单演示吗?谢谢!欢迎:)顺便问一下,函数中是否需要“return false”?我试着不用它,它也可以正常工作。不,不需要,只是我的一个习惯,包括它。更优雅的解决方案可能是不允许用户选择任何无效的日期。你可以看到。