Javascript 根据会员日期计算费用
运动员在我们的活动中登记。我输入他们的名字(Javascript 根据会员日期计算费用,javascript,jquery,Javascript,Jquery,运动员在我们的活动中登记。我输入他们的名字(#P1,#P2,等等),函数getCCCRexpire(ele)查找他们的俱乐部到期日期。我想修改函数calcEntryFee来计算入场费。如果球员到期日晚于今天,费用(#E1,#E2等)为$3。如果球员的到期日是今天或更早,费用为$5 问题是,会员资格今天或更早到期的非空白玩家不会被选中。例如,NAME=“Jones,John”会员资格_EXPIRES=“2017.01.12”应在费用中填入“$5”,但它只是将其留空 第二个问题是函数calcEntr
#P1
,#P2
,等等),函数getCCCRexpire(ele)
查找他们的俱乐部到期日期。我想修改函数calcEntryFee
来计算入场费。如果球员到期日晚于今天,费用(#E1
,#E2
等)为$3
。如果球员的到期日是今天或更早,费用为$5
问题是,会员资格今天或更早到期的非空白玩家不会被选中。例如,NAME=“Jones,John”会员资格_EXPIRES=“2017.01.12”
应在费用中填入“$5”
,但它只是将其留空
第二个问题是函数calcEntryFee
不必要的复杂性。我从来没有见过这么先进或坦率地混淆的东西。如果有人能够重写此函数并使其正确工作,我将不胜感激。很明显,我的头脑有问题。我甚至还没找到解决办法
HTML
函数calcEntryFee(elem){
var idx,成员,截止日期,今天,费用;
elem=elem |{};
如果(/^[PEMX](\d+)$/.test(元素id)){
idx=RegExp.$1;
}否则{
返回false;
}
member=getMemberData(jQuery('#P'+idx.val());
mmfee=parseFloat(jQuery('#M'+idx.val());
exDate=时刻(member.cccrEXP,'YYYY.MM.DD');
今天=时刻();
费用=“”;
如果(!成员){
费用=0;
}
//如果((exDate.isBefore(today)| | exDate==0)和&P1>“”){fee=5;}//我试图解决这个问题。
如果((exDate.isBefore(今天)| |!成员)){
费用=5;
}
如果(exDate.isSameOrAfter(今天)){
费用=3;
}
如果(member.cccrEXP==“”&&mmfee>0){
费用=0;
}
//更新报名费输入值。
jQuery('#E'+idx).val(费);
退货费;
}
函数getCCCRexpire(ele){
var i=null;
对于(i=0;cccr_mems.length>i;i++){
if(cccr_mems[i].Name==ele.value){
返回cccr_mems[i].cccrEXP;
}
}
返回;
}
for(设i=0;i
重写此函数并使其正确工作
(我忘了说)试试这个:
function calcEntryFee( ele ) {
let id_num = ele.id.substring(1); // 2 if `id` is E2
// If player name is blank, empties the "ef" field.
if ( ! ele.value ) {
$( '#E' + id_num ).val('');
return;
}
let cccrEXP = getCCCRexpire( ele ); // expiration date
// no expiration date
if ( ! cccrEXP ) {
// if membership fee > 0, fee is $0; else, it's $5
let fee = $( '#M' + id_num ).val() > 0 ? 0 : 5;
$( '#E' + id_num ).val( fee );
} else {
let today = moment(),
expire = moment( cccrEXP, 'YYYY.MM.DD' );
// expiration date is today or earlier; fee = $5
if ( expire.isSameOrBefore( today ) ) {
$( '#E' + id_num ).val(5);
}
// expiration date is later than today; fee = $3
else if ( expire.isAfter( today ) ) {
$( '#E' + id_num ).val(3);
}
}
}
更新
添加了费用
变量
选中ele.value
。如果为空,则清空“ef”字段
请提供一个工作示例,人们可以在其中看到您的问题。参考:单击文件夹并按tab键自动填充。所有过期的参赛者都不会显示5美元的费用。我尝试了您的代码。它位于,但没有显示5美元的付款。知道为什么不显示吗?加载页面,单击文件夹图标,转到名字并按住tab键。请参阅会员到期日为空的“Campbell”应该显示5英镑的费用,但事实并非如此。(但我非常感谢您的代码,它易于阅读和理解)因此,如果到期日为空,它应该是5美元,而不是像我的代码中那样的0美元?请参见//没有到期日,但会员费>0
是的,这是正确的。除非会员费>0。如果会员费>0,则费用为0,请注意!你解决了它。我在这方面工作了数小时,但没有成功。