使用jquery
在提交按钮上绑定了事件,大概100多行代码。
其中涉及到遍历、json格式化等方法。现象:
页面加载后,第一次点击没有任何反应。
第二次才会正确的执行流程。难道是js太多,处理太慢?我现在的解决方案:在ready事件里预先click()了一次,这样在用户点击的时候,就好像只点一次就成功了一样。但我感觉这样的方式不太正常,不知道还有其他什么别的原因?各位是否也碰到过类似的问题?

解决方案 »

  1.   

    绑定click事件的代码是不是在ready事件里面 ?
      

  2.   

    不能先click一次 这样解决不了根本问题 还是晒下你的代码吧~~~
      

  3.   

    //提交
                var doSubmit = function(istemp){
                    if(!onSubmitBefore()){return false;}
                    if(isContainData()){
                        formatJson();                   
                        if(isSomeUnitNoData())
                        {
                            if(!confirm( istemp ? "@(confirmStrSaveLater)" : "@(confirmStr)")){return false;}
                        }
                        else {
                            if(!confirm("有些预算单元的数据为空,确认要提交?")){return false;}
                        }
                        getWin("winLoading").center().open();
                        $.post("/Project/SubmitBudget",{
                            jsonStr : JSON.stringify(container),
                            projectId : "@Model.ProjectID",
                            budgetUnitType : "@Model.Scale.BudgetUnitType",
                            sd : "@Model.Scale.StartDate",
                            ed : "@Model.Scale.EndDate",
                            isTemp : istemp
                        },function(d){
                            if(d == "1"){
                                window.location.href = "/Project/Budget?projectID=@(Model.ProjectID)";
                            }
                            else if(d == "-1"){
                                alert("System Error");
                            }
                            else{
                                alert(d);
                            }
                        });
                    }
                    else{
                        alert("@Resource.Lang.Message_Error_NoDataNeedSave");
                    }
                };var onSubmitBefore = function(){
                    var r = validDetail();
                    if(r){
                        var scaleObj = genObj();
                        var r = false;
                        for(var i=0;i<container.length;i++)
                        {
                            if(container[i].DateKey == scaleObj.DateKey)
                            {
                                r = true;
                                container[i] = scaleObj;
                                break;
                            }
                        }
                        if(!r){
                            container.push(scaleObj);
                        }
                        //除了保存当前页数据,还需要把每个预算单元的数据也构造出来(如果没有的话)
                        for(var i=0;i<dateRange.length;i++){
                            var f = false;
                            for(var j=0;j<container.length;j++){
                                if(container[j].DateKey == dateRange[i]){
                                    f = true;
                                    break;
                                }
                            }
                            if(!f){
                                container.push({
                                    DateKey : dateRange[i],
                                    HrJsonStr : new Array(),
                                    OtherJsonStr : new Array()
                                });
                            }
                        }                    
                    }
                    return r;
                };
    //常规校验
                var validDetail = function () {
                    var r = true;
                    var numRegex = new RegExp("^[+]?(([0-9]{1,8}\d*))$");
                    //var dobuleRegex = new RegExp(/^[+]?(([1-9]\d{1,7}[.]?)|(0.))(\d{0,2})?$/);
                    var dobuleRegex = new RegExp(/^(\d{1,8})(\.\d{1,2})?$/);
                    var dateRegex = new RegExp("^((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})$");
                    $("#tbodyHrBudget tr").each(function(){
                        var numTb = $(this).find("input.amount");
                        if(!numRegex.test(numTb.val())){
                            numTb.addClass("t-state-error");
                            r = false;
                        }
                        else {
                            numTb.removeClass("t-state-error");
                        }
                        if(!r){
                            return false;
                        }
                    }); 
                    $("#tbodyOtherBudget tr").each(function(){
                        var numTb = $(this).find("input.amount");
                        var sel = $(this).find("select.occurtype");
                        var dateTb = $(this).find("input.t-input");
                        if(!dobuleRegex.test(numTb.val())){
                            numTb.addClass("t-state-error");
                            r = false;
                        }
                        else {
                            numTb.removeClass("t-state-error");
                        }
                        //如果是一次性成本,需要校验日期
                        var dstr = dateTb.val();
                        if(sel.val() == "1"){
                            if(!dateRegex.test(dstr)){
                                dateTb.addClass("t-state-error");
                                r = false;
                            }
                            else{
                                //范围也需要在进度安排范围之内
                                var sd = ("@(budgetSd)").toDate();
                                var ed = ("@(budgetEd)").toDate();
                                var d = dstr.toDate();
                                if( d<sd || d>ed)
                                {
                                    dateTb.addClass("t-state-error");
                                    alert("@Resource.Lang.Message_Info_DataNeedBetween");
                                    r = false;
                                }
                                else {
                                    dateTb.removeClass("t-state-error");
                                }
                            }                        
                        }                    if(!r){
                            return false;
                        }
                    }); 
                    return r;
                };
    var formatJson = function(){
                    for(var i=0;i<container.length;i++){
                        for(var j=0;j<container[i].OtherJsonStr.length;j++){
                            container[i].OtherJsonStr[j].OccurDate = formatDateStr(container[i].OtherJsonStr[j].OccurDate);
                        }
                    }
                };
    //是否有了待提交的数据
                var isContainData = function(){
                    var r = false;
                    for(var i=0;i<container.length;i++){
                        if(container[i].HrJsonStr.length > 0 || container[i].OtherJsonStr.length > 0){
                            r = true;
                            break;
                        }
                    }
                    return r;
                };
                var isSomeUnitNoData = function(){
                    var r = true;
                    for(var i=0;i<container.length;i++){
                        if(container[i].HrJsonStr.length == 0 && container[i].OtherJsonStr.length == 0){
                            r = false;
                            break;
                        }
                    }
                    return r;
                };var formatDateStr = function(str){
                    if(str != "" && str.indexOf("Date") > -1 ){                    
                        var num = str.match(/\d+/);
                        eval("var dd = Date(" + num + ")");
                        if(typeof(dd) != "undefined")
                        {
                            var dtd = new Date(dd);
                            
                            str = dtd.Format("yyyy/M/d");
                        }
                    }
                    return str;
                };//生成人力成本表格的JSON对象
                var genHrJson = function(){
                    var arr = new Array();
                    $("#tbodyHrBudget tr").each(function(){
                        var obj = new Object();
                        obj.JobTitle = $(this).find("select.jobtitle").val();
                        obj.Amount = $(this).find("input.amount").val();
                        obj.CostType = $(this).find("select.costtype").val();
                        arr.push(obj);
                    });
                    return arr;
                };
                //生成其他成本表格的JSON对象
                var genOtherJson = function(){
                    var arr = new Array();
                    $("#tbodyOtherBudget tr").each(function(){
                        var obj = new Object();
                        obj.OtherCostType = $(this).find("select.othercosttype").val();
                        obj.Amount = $(this).find("input.amount").val();
                        obj.CostType = $(this).find("select.costtype").val();
                        obj.OccurType = $(this).find("select.occurtype").val();
                        obj.OccurDate = $(this).find("input.t-input").val();
                        arr.push(obj);
                    });
                    return arr;
                };
                //当前页的整体JSON对象
                var genObj = function(){
                    var obj = new Object();
                    obj.DateKey = currentDay;
                    obj.HrJsonStr = genHrJson();
                    obj.OtherJsonStr = genOtherJson();
                    return obj;
                };
      

  4.   

    最后在ready事件里面绑定:
    //提交
                    $("#btnSubmit").click(function(){
                        doSubmit(false);
                    });
      

  5.   

    就是普通的button,第一次点击没有反应,第二次点击才会执行ajax提交事件。
      

  6.   

    lz你单步debug下,看看第一次button click时有没有触发ajax事件,看看是不是阻塞了。