添加功能会禁用js文件中的其他功能

时间:2010-12-12 10:15:46

标签: javascript

我在js文件中有这个功能,一切都运行正常:

function check_acco_form()
{
    var name=$("#name").val();
       var institution=$("#institution").val();
       var year=$("#year").val();

       //PNR Data
    var pnr1=$("#pnr1").val();
    var pnr2=$("#pnr2").val();
    // Arrival date info
    var arr_year=$("#arr_year").val();
    var arr_month=$("#arr_month").val();
    var arr_date=$("#arr_date").val();
    //Departure date info
    var dep_year=$("#dep_year").val();
    var dep_month=$("#dep_month").val();
    var dep_date=$("#dep_date").val();

    var numericExpression = /^[0-9]+$/;

       //Name, institution and year must not be empty
       if(name=="" || institution=="" || year=="")
    {
        alert("One or more fields are empty.");
              return;
       }
    //PNR must be all numbers
    if(!pnr1.match(numericExpression) || !pnr2.match(numericExpression))
    {   
        alert("A PNR number consists of 10 digits only. Please enter again.");
        $("#pnr1").val("");
        $("#pnr2").val("");
        return;
    }
    if(pnr1.length!=3 || pnr2.length!=7)
    {
        alert('Invalid PNR Number.');
        $("#pnr1").val("");
        $("#pnr2").val("");
        return;
    }

    if((arr_month==dep_month && dep_date<arr_date) || (dep_month<arr_month))
    {
        alert('Invalid dates.Please check again.');
        return;
    }

    //Test passed. Store in database;
    URL="saveAcco.php";
    parameters="name="+name+"&ins="+institution+"&year="+year+"&pnr="+pnr1+""+pnr2+"&dateArr="+arr_year+"-"+arr_month+"-"+arr_date+"&dateDep="+dep_year+"-"+dep_month+"-"+dep_date;
    $.get(URL+"?"+parameters,function(data){
        $("#msg_box").html(data);
        if(data=="Your changes have been saved." || data=="Your data has been saved and is pending approval.")
              {
            $("#acco_status").html('<br/><b>Accomodation Approval Status</b> : <span style="padding:3px;background-color:#f4fb3c">Approval Pending</span><br/><br/>');
              }
        $("#msg_box").fadeIn("slow",function(){
            setTimeout('fadeOutMsgBox();',3000);
              });
          });
}

我对这个函数做了一些改动(添加了变量'mobile_num'和'train_num',包括'if'条件以确保用户只输入数字并对jQuery get函数进行了更改)导致了以下代码:

function check_acco_form()
{
    //Personal Information
    var name=$("#name").val();
    var institution=$("#institution").val();
    var year=$("#year").val();

    //Contact Information
    var mobile_num=$("#mobile").val();

       //PNR Data
    var pnr1=$("#pnr1").val();
    var pnr2=$("#pnr2").val();

    //Train Number
    var train_num=$("#trainnum").val();

    // Arrival date info
    var arr_year=$("#arr_year").val();
    var arr_month=$("#arr_month").val();
    var arr_date=$("#arr_date").val();
    //Departure date info
    var dep_year=$("#dep_year").val();
    var dep_month=$("#dep_month").val();
    var dep_date=$("#dep_date").val();

    var numericExpression = /^[0-9]+$/;

    //Name, institution and year must not be empty.
    if(name=="" || institution=="" || year=="")
    {
        alert("One or more fields are empty.");
        return;
    }

    //PNR can be empty but if entered must be all numbers
    if(pnr1!="" and pnr2!="")
    {
        if(!pnr1.match(numericExpression) || !pnr2.match(numericExpression))
        {   
            alert("A PNR number consists of 10 digits only. Please enter again.");
            $("#pnr1").val("");
            $("#pnr2").val("");
            return;
        }

        if(pnr1.length!=3 || pnr2.length!=7)
        {
            alert('Invalid PNR Number.');
            $("#pnr1").val("");
            $("#pnr2").val("");
            return;
        }
    }

    //Train number can be empty but if entered must be all numbers
    if(train_num!="")
    {
        if(!train_num.match(numericExpression))
        {   
            alert("Train number must consits of digits only");
            $("#trainnum").val("");
            return;
        }
    }

    //Mobile num can be empty but must be all numbers
    if(mobile_num!="")
    {
        if(!mobile_num.match(numericExpression))
        {
            alert("Invalid mobile number");
            $("#mobile_num").val("");
            return;
        }
        if(mobile_num.length!=10)
        {
            alert('A mobile number consists of 10 digits.Please enter again.');
            return;
        }
    }

    if((arr_month==dep_month && dep_date<arr_date) || (dep_month<arr_month))
    {
        alert('Departure date cannot be before arrival date.Please check again.');
        return;
    }

    //Test passed. Store in database;
    URL="saveAcco.php";
    parameters="name="+name+"&ins="+institution+"&year="+year+"&pnr="+pnr1+""+pnr2+"&dateArr="+arr_year+"-"+arr_month+"-"+arr_date+"&dateDep="+dep_year+"-"+dep_month+"-"+dep_date+"&mobile="+mobile_num+"&train_num="+train_num;
    $.get(URL+"?"+parameters,function(data){
        $("#msg_box").html(data);
        if(data=="Your changes have been saved." || data=="Your data has been saved and is pending approval.")
              {
            $("#acco_status").html('<br/><b>Accomodation Approval Status</b> : <span style="padding:3px;background-color:#f4fb3c">Approval Pending</span><br/><br/>');
            $("#acco_letter_print").html('Download accomodation letter <a href="PDF/acco_print.php" target="_blank">here</a>');
            $("#acco_letter_print").fadeIn();           
              }
        $("#msg_box").fadeIn("slow",function(){
            setTimeout('fadeOutMsgBox();',3000);
              });
          }); //End of get function

}

更改后,此函数的js文件中的所有函数突然停止工作,包括此函数。在搜索论坛时,我发现了这个讨论:JavaScript function causing all other functions not to work inside js file,其中说错误可能是由于使用了保留字。但是,我在代码中找不到任何用作变量的保留字。任何想法可能出现什么问题?

1 个答案:

答案 0 :(得分:2)

你有这个:

if(pnr1!="" and pnr2!="")

应该是:

if(pnr1!="" && pnr2!="")

这样的任何语法错误都会导致整个事情失败,请务必检查错误控制台是否有这样的事情,他们会快速指出原因。


顺便说一下,尽量不要将字符串传递给setTimeout(),直接传递函数引用,改变它:

setTimeout('fadeOutMsgBox();',3000);

对此:

setTimeout(fadeOutMsgBox,3000);

这样可以减少问题,并允许函数在范围内的任何位置,它不必是全局的(就像使用字符串一样)。