这是操作出生日期和年龄的代码,如果年龄为空,我会收到字段自定义事件的错误。我似乎无法弄清楚为什么这个 JavaScript 在事件上抛出“无法分配给函数结果”错误:onchange,当此错误出现在表单加载时。如果出生日期字段为空,是否有办法允许代码不执行任何操作?
function birthdate_onchange()
{
var age = Xrm.Page.getAttribute("new_age");
var bDay = Xrm.Page.getAttribute("birthdate");
if (bDay.getValue() != null)
{
var now = new Date();
var thisYear = now.getFullYear();
var birthYear = bDay.getValue().getFullYear();
if((bDay.getValue().getMonth()-now.getMonth())>=0)
{
if((bDay.getValue().getMonth()-now.getMonth())==0 && (bDay.getValue().getDate()-now.getDate())<=0)
{
age.setValue(thisYear-birthYear);
}
else
{
age.setValue(thisYear-birthYear-1);
}
}
else
{
age.setValue(thisYear-birthYear);
}
}
else
{
age.getValue()=null;
}
}
我希望得到一些反馈,因为我是 JavaScript 新手,但非常想学习这门语言。可以根据需要提供更多代码或详细说明,因为这只是我们的联系人脚本的一部分。
谢谢
PGM
编辑 1(2014 年 5 月 20 日):
现在年龄/出生日期字段更改已解决,我收到一个“fireonchange”对象不支持属性或方法“fireonchange”。
我有一种感觉它来自这段代码:
//TODO: could use to be upgraded to 2011 syntax
if (Xrm.Page.getAttribute("srobo_birthdatepre1900").getValue() != null) {
crmForm.all.srobo_birthdatepre1900.style.display = 'inline';
crmForm.all.srobo_birthdatepre1900_c.style.display = 'inline';
crmForm.all.birthdate.style.display = 'none';
crmForm.all.birthdate_c.style.display = 'none';
}
else {
crmForm.all.birthdate.style.display = 'inline';
}
try {
//Sets Age
//TODO: test if this works
Xrm.Page.getAttribute("birthdate").fireOnChange();
}
catch (err1) {
alert("Contact onLoad Error 1" + err1 + " " + err1.description);
}
try {
}
catch (err2) {
alert("Contact onLoad Error 2 " + entity + ": " + err2 + " " + err2.description);
}
} //end on load
我一直在尝试将 CRM 4.0 JavaScript 版本控制切换到 2011 友好语法,但我的 CRM 中仍然出现错误。谁能告诉我语法方面的问题出在哪里?
我已经切换了这一行: Xrm.Page.getAttribute("生日").fireOnChange();
但仍然不明白为什么它会抛出 fireonchange 错误?
非常感谢您迄今为止提供的所有帮助!我真的很感激!
最佳答案
尝试换线
age.getValue()=null;
至
age.setValue(null);
关于javascript - CRM 2011 - 联系人表单加载无法在生日字段更改时分配给函数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23764790/