Javascript 在JQuery日期选择器中再添加一个事件当前添加功能不起作用
目前正在使用jquery计算年份。这是完美的工作预期,但我想添加一个更多的功能到它。如果用户输入了错误的值,例如121212,它应该说“您输入了错误的格式。请输入正确的格式”Javascript 在JQuery日期选择器中再添加一个事件当前添加功能不起作用,javascript,jquery,html,datepicker,Javascript,Jquery,Html,Datepicker,目前正在使用jquery计算年份。这是完美的工作预期,但我想添加一个更多的功能到它。如果用户输入了错误的值,例如121212,它应该说“您输入了错误的格式。请输入正确的格式” $('.startDate').change(函数(事件){ var txtVal6=$(this.val(); //警报(“检查内容”+txtVal); 如果(isDate5(txtVal6)){ $(this.removeClass(“erred”); 事件。stopImmediatePropagation(); }否
$('.startDate').change(函数(事件){
var txtVal6=$(this.val();
//警报(“检查内容”+txtVal);
如果(isDate5(txtVal6)){
$(this.removeClass(“erred”);
事件。stopImmediatePropagation();
}否则{
警报(“请以有效格式输入日期”);
$(this.addClass(“erred”).val(“”);
事件。stopImmediatePropagation();
}
});
函数isDate5(startDate){
var currVal6=起始日期;
如果(currVal6='')返回false;
var rxDatePattern6=/^\d{2}[./-]\d{2}[./-]\d{4}$//;//声明正则表达式
var dtArray6=currVal6.match(rxDatePattern6);//格式正确吗?
if(dtArray6==null)返回false;
//检查mm/dd/yyyy格式。
dtMonth6=dtArray6[3];
dtDay6=dtArray6[5];
dtYear6=dtArray6[1];
如果(dtMonth6<1 | | dtMonth6>12)返回false;
否则如果(dtDay6<1 | | dtDay6>31)返回false;
else if((dtMonth6==4 | | dtMonth6==6 | | dtMonth6==9 | | dtMonth6==11)和&dtDay6==31)返回false;
else if(dtMonth6==2){
var isleap=(dtArray6%4==0&&(dtArray6%100!=0 | | dtArray6%400==0));
如果(dtDay6>29 | |(dtDay6==29&&!isleap))返回false;
}
返回true;
}
$('.endDate').change(函数(事件){
var txtVal7=$(this.val();
//警报(“检查内容”+txtVal);
如果(isDate6(txtVal7)){
$(this.removeClass(“erred”);
事件。stopImmediatePropagation();
}否则{
警报(“请以有效格式输入日期”);
$(this.addClass(“erred”).val(“”);
事件。stopImmediatePropagation();
}
});
函数isDate6(endDate){
var currVal7=结束日期;
如果(currVal7='')返回false;
var rxDatePattern7=/^\d{2}[./-]\d{2}[./-]\d{4}$//;//声明正则表达式
var dtArray7=currVal7.match(rxDatePattern7);//格式正确吗?
if(dtArray7==null)返回false;
//检查mm/dd/yyyy格式。
dtMonth7=dtArray7[3];
dtDay7=dtArray7[5];
dtYear7=dtArray7[1];
如果(dtMonth7<1 | | dtMonth7>12)返回false;
否则如果(dtDay7<1 | | dtDay7>31)返回false;
else if((dtMonth7==4 | | dtMonth7==6 | | dtMonth7==9 | | dtMonth7==11)和&dtDay7==31)返回false;
else if(dtMonth7==2){
var isleap=(dtArray7%4==0&&(dtArray7%100!=0 | | dtArray7%400==0));
如果(dtDay7>29 | |(dtDay7==29&&!isleap))返回false;
}
返回true;
}
使用此代码,如果我在文本字段“截止日期”字段中输入值12112,则表示请输入正确的值,但如果我在“起始日期”和“截止日期”字段中输入正确的日期值,则无法计算年份
提前谢谢
这是我不知道你为什么不使用Javascript内置的
Date
对象,不管怎样,我在你的脚本中做了一些更改,从RegExp
开始,删除了一些没有用的函数。这就是我所做的:
var dateRegex=new RegExp("^[0-9]{2}-[0-9]{2}-[0-9]{4}$");
$(document).on('change', ".datepicker", function() {
// No need for each() part, you already know which one is the start and which one is the end
if($(this).val()){
if(!dateRegex.test($(this).val())){
alert('Kindly enter date in valid format');
$(this).val('');
return false;
}
}
if($(".startDate").val() && $(".endDate").val()){
var dateStart = $(".datepicker.startDate").val(),
dateEnd = $(".datepicker.endDate").val();
// No need even for array, you just get datepicker value like this and test it
var dateStartArray=dateStart.split('-'),dateEndArray=dateEnd.split('-');
var fromdate=new Date(dateStartArray[2],dateStartArray[0]-1,dateStartArray[0]),
todate=new Date(dateEndArray[2],dateEndArray[0]-1,dateEndArray[0]);
// Creating date object with format YYYY-MM-GG ( taken from datepicker's split array )
console.log(fromdate);
console.log(todate);
if(fromdate>todate){
alert("To date should be greater than from date");
return false;
} else {
var yearsDifference=todate.getFullYear()-fromdate.getFullYear();
var monthsDifference=(todate.getMonth()+12*todate.getFullYear())-(fromdate.getMonth()+12*fromdate.getFullYear());
$("#txt_expy").html(Math.floor(monthsDifference/12)+' Years');
$("#txt_expm").html((monthsDifference%12)+' Months');
}
} else {
return false;
}
});
您可以检查此项查看我所做的所有修改,看看是否有帮助:)更新代码
var diffDays = 0;
$(".cloned-row3").find(".datepicker").removeClass('hasDatepicker').datepicker({
dateFormat: "mm-dd-yy",
changeMonth: true,
yearRange: "-100:+0",
changeYear: true,
maxDate: new Date(),
showButtonPanel: false,
beforeShow: function() {
setTimeout(function() {
$('.ui-datepicker').css('z-index', 99999999999999);
}, 0);
}
});
var count = 0;
$(document).on("click", ".exp_add_button", function() {
var $clone = $('.cloned-row3:eq(0)').clone(true, true);
$clone.find('[id]').each(function() {
this.id += 'someotherpart'+count;
});
$clone.find('.btn_more').after("<input type='button' class='btn_less1 selbtnless' id='buttonless' value='remove'/>")
$clone.attr('id', "added" + (++count));
$clone.find(".startDate").val('');
$clone.find(".endDate").val('');
/*$clone.find(".degree_Description").attr('disabled', true).val('');*/
$clone.find("input.startDate").removeClass('hasDatepicker').removeData('datepicker')
.unbind()
.datepicker({
dateFormat: "mm-dd-yy",
changeMonth: true,
yearRange: "-100:+0",
changeYear: true,
maxDate: new Date(),
showButtonPanel: false,
beforeShow: function() {
setTimeout(function() {
$('.ui-datepicker').css('z-index', 99999999999999);
}, 0);
}
});
$clone.find("input.endDate")
.removeClass('hasDatepicker')
.removeData('datepicker')
.unbind()
.datepicker({
dateFormat: "mm-dd-yy",
changeMonth: true,
yearRange: "-100:+0",
changeYear: true,
maxDate: new Date(),
showButtonPanel: false,
beforeShow: function() {
setTimeout(function() {
$('.ui-datepicker').css('z-index', 99999999999999);
}, 0);
}
});
$(this).parents('.wrk_exp').after($clone);
});
$(document).on('click', ".btn_less1", function() {
var len = $('.cloned-row3').length;
if(len > 1) {
var RemoveStartDate = $(this).closest(".btn_less1").parent().parent().parent().find('.startDate ').val();
var RemoveEndDate = $(this).closest(".btn_less1").parent().parent().parent().find('.endDate ').val();
if((RemoveStartDate!='')||(RemoveEndDate!='')){
var dateStartArray=RemoveStartDate.split('-'),dateEndArray=RemoveEndDate.split('-');
var fromdate=new Date(dateStartArray[2],dateStartArray[0]-1,dateStartArray[0]),
todate=new Date(dateEndArray[2],dateEndArray[0]-1,dateEndArray[0]);
var yearsDifference=todate.getFullYear()-fromdate.getFullYear();
var monthsDifference=(todate.getMonth()+12*todate.getFullYear())-(fromdate.getMonth()+12*fromdate.getFullYear());
var PrevTotalYear = parseInt($("#txt_expy>span").text());
var PrevTotalMonth = parseInt($("#txt_expm>span").text());
$("#txt_expy>span").text('');
$("#txt_expm>span").text('');
PrevTotalYear = PrevTotalYear*12;
var CurTotalYear = Math.floor(((PrevTotalYear+PrevTotalMonth)-monthsDifference)/12);
var CurTotalMonth = (monthsDifference-PrevTotalMonth)%12;
$("#txt_expy>span").text(CurTotalYear);
$("#txt_expm>span").text(CurTotalMonth);
$(this).closest(".btn_less1").parent().parent().parent().remove();
}else{
$(this).closest(".btn_less1").parent().parent().parent().remove();
}
}
});
$(document).on('change', ".datepicker", function() {
// No need for each() part, you already know which one is the start and which one is the end
dateRegex=new RegExp("^[0-9]{2}-[0-9]{2}-[0-9]{4}$");
if($(this).hasClass('startDate')) {
var dateStart = $(this).val();
if(!dateRegex.test(dateStart)){
alert('Kindly enter date in valid format');
return false;
}
return false;
}
else if($(this).hasClass('endDate') && isNaN($(this).val())|| $(this).val()!='') {
var dateEnd = $(this).val();
if(!dateRegex.test(dateEnd)){
alert('Kindly enter date in valid format');
return false;
}else{
dateStart = $(this).closest('.row').find('.startDate').val();
}
}else{
return false;
}
if((dateStart!='')||(dateEnd!='')){
// No need even for array, you just get datepicker value like this and test it
var dateStartArray=dateStart.split('-'),dateEndArray=dateEnd.split('-');
var fromdate=new Date(dateStartArray[2],dateStartArray[0]-1,dateStartArray[0]),
todate=new Date(dateEndArray[2],dateEndArray[0]-1,dateEndArray[0]);
// Creating date object with format YYYY-MM-GG ( taken from datepicker's split array )
if(fromdate>todate){
alert("To date should be greater than from date");
return false;
} else {
var yearsDifference=todate.getFullYear()-fromdate.getFullYear();
var monthsDifference=(todate.getMonth()+12*todate.getFullYear())-(fromdate.getMonth()+12*fromdate.getFullYear());
var PrevTotalYear = parseInt($("#txt_expy>span").text());
var PrevTotalMonth = parseInt($("#txt_expm>span").text());
$("#txt_expy>span").text('');
$("#txt_expm>span").text('');
PrevTotalYear = PrevTotalYear*12;
var CurTotalYear = Math.floor((monthsDifference+PrevTotalYear+PrevTotalMonth)/12);
var CurTotalMonth = (monthsDifference+PrevTotalMonth)%12;
$("#txt_expy>span").text(CurTotalYear);
$("#txt_expm>span").text(CurTotalMonth);
}
}
else {
return false;
}
});
var diffDays=0;
$(“.cloned-row3”).find(“.datepicker”).removeClass('hasDatepicker').datepicker({
日期格式:“年月日”,
变化月:对,
年份范围:“-100:+0”,
变化年:是的,
maxDate:新日期(),
showButtonPanel:false,
beforeShow:function(){
setTimeout(函数(){
$('ui datepicker').css('z-index',9999999999);
}, 0);
}
});
var计数=0;
$(文档).on(“单击”,“.exp\u添加”按钮”,函数(){
var$clone=$('.clone-row3:eq(0)')。clone(true,true);
$clone.find('[id]')。每个(函数(){
this.id+=“someotherpart”+计数;
});
$clone.find('.btn_more')。在(“”)之后
$clone.attr('id',“added”+(++count));
$clone.find(“.startDate”).val(“”);
$clone.find(“.endDate”).val(“”);
/*$clone.find(“.degree_Description”).attr('disabled',true).val(“”)*/
$clone.find(“input.startDate”).removeClass('hasDatepicker').removeData('datepicker'))
.unbind()
.日期选择器({
日期格式:“年月日”,
变化月:对,
年份范围:“-100:+0”,
变化年:是的,
maxDate:新日期(),
showButtonPanel:false,
beforeShow:function(){
setTimeout(函数(){
$('ui datepicker').css('z-index',9999999999);
}, 0);
}
});
$clone.find(“input.endDate”)
.removeClass('hasDatepicker')
.removeData(“日期选择器”)
.unbind()
.日期选择器({
日期格式:“年月日”,
变化月:对,
年份范围:“-100:+0”,
变化年:是的,
maxDate:新日期(),
showButtonPanel:false,
beforeShow:function(){
setTimeout(函数(){
$('ui datepicker').css('z-index',9999999999);
}, 0);
}
});
$(this).parents('.wrk_exp')。在($clone)之后;
});
$(文档).on('click',“.btn_less1”,函数(){
变量len=$('.cloned-row3').length;
如果(len>1){
var RemoveStartDate=$(this).closest(“.btn_less1”).parent().parent().parent().find('.start
var diffDays = 0;
$(".cloned-row3").find(".datepicker").removeClass('hasDatepicker').datepicker({
dateFormat: "mm-dd-yy",
changeMonth: true,
yearRange: "-100:+0",
changeYear: true,
maxDate: new Date(),
showButtonPanel: false,
beforeShow: function() {
setTimeout(function() {
$('.ui-datepicker').css('z-index', 99999999999999);
}, 0);
}
});
var count = 0;
$(document).on("click", ".exp_add_button", function() {
var $clone = $('.cloned-row3:eq(0)').clone(true, true);
$clone.find('[id]').each(function() {
this.id += 'someotherpart'+count;
});
$clone.find('.btn_more').after("<input type='button' class='btn_less1 selbtnless' id='buttonless' value='remove'/>")
$clone.attr('id', "added" + (++count));
$clone.find(".startDate").val('');
$clone.find(".endDate").val('');
/*$clone.find(".degree_Description").attr('disabled', true).val('');*/
$clone.find("input.startDate").removeClass('hasDatepicker').removeData('datepicker')
.unbind()
.datepicker({
dateFormat: "mm-dd-yy",
changeMonth: true,
yearRange: "-100:+0",
changeYear: true,
maxDate: new Date(),
showButtonPanel: false,
beforeShow: function() {
setTimeout(function() {
$('.ui-datepicker').css('z-index', 99999999999999);
}, 0);
}
});
$clone.find("input.endDate")
.removeClass('hasDatepicker')
.removeData('datepicker')
.unbind()
.datepicker({
dateFormat: "mm-dd-yy",
changeMonth: true,
yearRange: "-100:+0",
changeYear: true,
maxDate: new Date(),
showButtonPanel: false,
beforeShow: function() {
setTimeout(function() {
$('.ui-datepicker').css('z-index', 99999999999999);
}, 0);
}
});
$(this).parents('.wrk_exp').after($clone);
});
$(document).on('click', ".btn_less1", function() {
var len = $('.cloned-row3').length;
if(len > 1) {
var RemoveStartDate = $(this).closest(".btn_less1").parent().parent().parent().find('.startDate ').val();
var RemoveEndDate = $(this).closest(".btn_less1").parent().parent().parent().find('.endDate ').val();
if((RemoveStartDate!='')||(RemoveEndDate!='')){
var dateStartArray=RemoveStartDate.split('-'),dateEndArray=RemoveEndDate.split('-');
var fromdate=new Date(dateStartArray[2],dateStartArray[0]-1,dateStartArray[0]),
todate=new Date(dateEndArray[2],dateEndArray[0]-1,dateEndArray[0]);
var yearsDifference=todate.getFullYear()-fromdate.getFullYear();
var monthsDifference=(todate.getMonth()+12*todate.getFullYear())-(fromdate.getMonth()+12*fromdate.getFullYear());
var PrevTotalYear = parseInt($("#txt_expy>span").text());
var PrevTotalMonth = parseInt($("#txt_expm>span").text());
$("#txt_expy>span").text('');
$("#txt_expm>span").text('');
PrevTotalYear = PrevTotalYear*12;
var CurTotalYear = Math.floor(((PrevTotalYear+PrevTotalMonth)-monthsDifference)/12);
var CurTotalMonth = (monthsDifference-PrevTotalMonth)%12;
$("#txt_expy>span").text(CurTotalYear);
$("#txt_expm>span").text(CurTotalMonth);
$(this).closest(".btn_less1").parent().parent().parent().remove();
}else{
$(this).closest(".btn_less1").parent().parent().parent().remove();
}
}
});
$(document).on('change', ".datepicker", function() {
// No need for each() part, you already know which one is the start and which one is the end
dateRegex=new RegExp("^[0-9]{2}-[0-9]{2}-[0-9]{4}$");
if($(this).hasClass('startDate')) {
var dateStart = $(this).val();
if(!dateRegex.test(dateStart)){
alert('Kindly enter date in valid format');
return false;
}
return false;
}
else if($(this).hasClass('endDate') && isNaN($(this).val())|| $(this).val()!='') {
var dateEnd = $(this).val();
if(!dateRegex.test(dateEnd)){
alert('Kindly enter date in valid format');
return false;
}else{
dateStart = $(this).closest('.row').find('.startDate').val();
}
}else{
return false;
}
if((dateStart!='')||(dateEnd!='')){
// No need even for array, you just get datepicker value like this and test it
var dateStartArray=dateStart.split('-'),dateEndArray=dateEnd.split('-');
var fromdate=new Date(dateStartArray[2],dateStartArray[0]-1,dateStartArray[0]),
todate=new Date(dateEndArray[2],dateEndArray[0]-1,dateEndArray[0]);
// Creating date object with format YYYY-MM-GG ( taken from datepicker's split array )
if(fromdate>todate){
alert("To date should be greater than from date");
return false;
} else {
var yearsDifference=todate.getFullYear()-fromdate.getFullYear();
var monthsDifference=(todate.getMonth()+12*todate.getFullYear())-(fromdate.getMonth()+12*fromdate.getFullYear());
var PrevTotalYear = parseInt($("#txt_expy>span").text());
var PrevTotalMonth = parseInt($("#txt_expm>span").text());
$("#txt_expy>span").text('');
$("#txt_expm>span").text('');
PrevTotalYear = PrevTotalYear*12;
var CurTotalYear = Math.floor((monthsDifference+PrevTotalYear+PrevTotalMonth)/12);
var CurTotalMonth = (monthsDifference+PrevTotalMonth)%12;
$("#txt_expy>span").text(CurTotalYear);
$("#txt_expm>span").text(CurTotalMonth);
}
}
else {
return false;
}
});