亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

個人認為是jquery中調用js的function產生的問題,大家有什么建議么?

個人認為是jquery中調用js的function產生的問題,大家有什么建議么?

森林海 2023-04-26 21:17:20
如題。需要根據出生日期輸入框的值計算目前年齡(周歲)。已找到可根據出生日期計算周歲的代碼(使用原生js編寫,既下面代碼中的function jsGetAge(strBirthday)),但在采用JQuery編寫的主控制js(search.js)中無法調用。代碼如下所示:html文件:<script type="text/javascript" src="js/jquery-1.8.2.min.js"></script> <script type="text/javascript" src="js/search.js"></script> ……(無關代碼忽略) 出生日期 <input name="info.birthday" type="text" id="birthday" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd'})" class="Wdate" /> 年齡 <input class="shortText" name="info.age" type="text" id="age" /> 歲search.js文件:function jsGetAge(strBirthday) {        var returnAge; var strBirthdayArr=strBirthday.split("-"); var birthYear = strBirthdayArr[0]; var birthMonth = strBirthdayArr[1]; var birthDay = strBirthdayArr[2]; d = new Date(); var nowYear = d.getYear(); var nowMonth = d.getMonth() + 1; var nowDay = d.getDate(); if(nowYear == birthYear) { returnAge = 0;//同年 則為0歲 } else { var ageDiff = nowYear - birthYear ; //年之差 if(ageDiff > 0) { if(nowMonth == birthMonth){ var dayDiff = nowDay - birthDay;//日之差 if(dayDiff < 0) {returnAge = ageDiff - 1;} else {returnAge = ageDiff ;} }else{ var monthDiff = nowMonth - birthMonth;//月之差 if(monthDiff < 0) {returnAge = ageDiff - 1;} else {returnAge = ageDiff ;} } } else {returnAge = -1;//返回-1 表示出生日期輸入錯誤 晚于今天} } return returnAge;//返回周歲年齡} $(document).ready(function() { $("#age").click(function(){ alert(jsGetAge($("#birthday").val())) if($("#birthday").val()!=""){//由于采用日歷控件,可保證字符串格式正確 var age = jsGetAge($("birthday").val()) if(age>=0){ $("#age").val()=age $("#age").attr("readonly",true) }else{ $("#birthday").val()="" alert("出生日期不能晚于今天") } } }) })經測試,alert(jsGetAge($("#birthday").val()))無法彈出對應警告框,因此個人認為是jquery中調用js的function產生的問題。大家有什么解決方案嗎?謝謝。
查看完整描述

2 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

不好意思,經過仔細查看和修改,問題已經得到解決。在此總結一下以供其他人借鑒:
1.function jsGetAge(strBirthday)函數的位置沒有問題,可寫在$(document).ready(function() {}中或外部。
2.問題產生的原因是我的頁面同時加載了其他js,加載速度較慢,導致click函數無法快速加載,因此誤以為沒有效果。實際上是有效果的。
3.大家不要直接使用這個根據生日日期計算周歲的函數,這個函數存在問題,沒有對同年進行進一步檢驗就判定年齡為0周歲。
修改后的計算周歲的函數:

//使用前提:參數strBirthday已經是正確格式的2007-02-09這樣的日期字符串(年份必須是完整年份)function jsGetAge(strBirthday)
	{       
		var returnAge;		var strBirthdayArr=strBirthday.split("-");		var birthYear = strBirthdayArr[0];		var birthMonth = strBirthdayArr[1];		var birthDay = strBirthdayArr[2];
		
		d = new Date();		var nowYear = d.getFullYear();		var nowMonth = d.getMonth() + 1;		var nowDay = d.getDate()		
		if(nowYear == birthYear)
		{	
			if(birthMonth<nowMonth)
				returnAge=0;//同年月份為今月前,0歲
			else
				if(birthMonth==nowMonth && birthDay<=nowDay)
					returnAge = 0;//同年同月日期為今天前 0歲
				else 
					returnAge = -1;//同年同月但日為今天后或今月后,日期無效
		}		else
		{			var ageDiff = nowYear - birthYear ; //年之差
			if(ageDiff > 0)
			{				if(nowMonth == birthMonth)
				{					var dayDiff = nowDay - birthDay;//日之差
					if(dayDiff < 0)
					{
						returnAge = ageDiff - 1;
					}					else
					{
						returnAge = ageDiff ;
					}
				}				else
				{					var monthDiff = nowMonth - birthMonth;//月之差
					if(monthDiff < 0)
					{
						returnAge = ageDiff - 1;
					}					else
					{
						returnAge = ageDiff ;
					}
				}
			}			else
			{
				returnAge = -1;//返回-1 表示出生日期輸入錯誤 晚于今天
			}
		}		return returnAge;//返回周歲年齡}


查看完整回答
反對 回復 2023-04-29
?
達令說

TA貢獻1821條經驗 獲得超6個贊

看到你的代碼里jsGetAge方法的計算邏輯實在太啰嗦,我就想來簡化一下,所以得到第一個方法:

方法1 

function jsGetAge(strBirthday) {
	var yTime = 365*24*60*60*1000,
		bTime = new Date(strBirthday).getTime(),
		nTime = new Date().getTime();

	return Math.floor((nTime-bTime)/yTime);
}

alert(jsGetAge('1984-3-2'))

但這個方法存在一個BUG,因為并不是每年都是365天,所以這里算出來的年齡會有一定的差距;

于是我繼續改進有了第二個方法:

方法二 

function jsGetAge(strBirthday) {
	var bDay = new Date(strBirthday),
		nDay = new Date(),
		nbDay = new Date(nDay.getFullYear(),bDay.getMonth(),bDay.getDate()),
		age = nDay.getFullYear() - bDay.getFullYear();	if (bDay.getTime()>nDay.getTime()) {return '日期有錯'}
	return nbDay.getTime()<=nDay.getTime()?age:--age;
}

alert(jsGetAge('1984-3-2'))

這里增加了一個生日日期大于今天的錯誤提示,通過計算今年生日和今天的時間差來判定由年份計算來的時間是否要減1;
經過簡單測試感覺邏輯上應該沒問題了。


查看完整回答
反對 回復 2023-04-29
  • 2 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號