我需要编写一个全球javascript代码,按生日字段计算年龄,并将函数从不同的javascript文件调用到特定实体。 从某种原因,我收到错误消息" CalculateAge未定义"在我将实体javascript文件加载到表单后。
这是我在全局文件中写的内容:
CalculateAge: function (birthd)
{
if (birthd == null) {
return;}
var today = new Date().getFullYear();
year1 = birthd.getFullYear();
return (today-year1);
}
这是我在我的实体文件中写的,我正在加载到表单:
function onLoad() {
var birthDate = Xrm.Page.getAttribute("el_birth_date").getValue();
Xrm.Page.getAttribute("el_age").setValue(CalculateAge(birthDate));
}
我是Javascript的新手..请问ypu请帮忙吗?
答案 0 :(得分:3)
您用来计算年龄的JavaScript代码不正确,它不考虑月份和日期。 这是一个正确的版本:
function CalculateAge(birthday, ondate) {
// if ondate is not specified consider today's date
if (ondate == null) { ondate = new Date(); }
// if the supplied date is before the birthday returns 0
if (ondate < birthday) { return 0; }
var age = ondate.getFullYear() - birthday.getFullYear();
if (birthday.getMonth() > ondate.getMonth() || (birthday.getMonth() == ondate.getMonth() && birthday.getDate() > ondate.getDate())) { age--; }
return age;
}
可以用作:
var birthday = Xrm.Page.getAttribute("new_birthday").getValue();
var age = CalculateAge(birthday);
alert(age);
// age on 1st January 2000, JavaScript Date() object contains months starting from 0
var testdate = new Date(2000, 0, 1, 0, 0, 0);
var testage = CalculateAge(birthday,testdate);
alert(testage);
如果您没有定义CalculateAge,可能您没有在表单中包含包含您的函数的webresource。如果您有两个JS Web资源(一个包含该函数,另一个包含onLoad事件),则两者都需要包含在表单中。
如果您的CRM版本存在异步javascript加载问题,最好将CalculateAge函数包含在与onLoad事件相同的文件中,但如果您希望将它们分开,请查看此博客发布:Asynchronous loading of JavaScript Web Resources after U12/POLARIS
JavaScript函数来自我的博文:Calculate age in Microsoft Dynamics CRM 2011