Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据会员日期计算费用_Javascript_Jquery - Fatal编程技术网

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,请注意!你解决了它。我在这方面工作了数小时,但没有成功。