jq ajax获取数据动态添加,each遍历不到问题

问题描述:使用ajax获取数据动态添加,使用each遍历不到
问题原因:加载顺序问题,ajax还没执行完就使用each遍历了,肯定遍历不到
解决办法:在ajax执行成功后调用遍历的函数(在success里调用)

var page = {
    sTable:'',
    cTable:'',
    fixedHeaderOffset:0,
    init: function () { //页面初始化方法
        this.initProject();
    },

   //项目范围
initProject:function () {
    //获取项目
    $('#select-project').click(function () {
        if(!validate()) return ;

        var msg = tmpl("projectselector_tmpl", {
            selectMode: 0
        });

        bootbox.dialog({
            message: msg,
            title: "选择项目",
            onEscape: true,
            backdrop: true
        });
        // 搜索用户
        searProject();

        //项目是否已选择 
        //isCheckedProject(); //最开始是在这里调用检查项目(是否已选,已选就选上),由于searProject()是使用ajax请求数据并添加数据,此时调用searProject(),ajax还没执行到。在success里调用isCheckedProject()解决问题

        //切换房源类型
        $(document).on("click","#projectTableContainer .header ul li",selectType);

        //选择/取消选择项目
        $(document).on("click","#projectTableContainer table tbody tr",function () {
            if($(this).hasClass('checked')){
                $(this).removeClass('checked');
                $(this).find('.is-selected').text('');
            }else{
                $(this).addClass('checked');
                $(this).find('.is-selected').text('√');
            }
        });

        //全选项目
        $(document).on("click","#projectTableContainer .footer .select-all",function () {
            $('#projectTableContainer table tbody tr').each(function (i,o) {
                $(o).addClass('checked');
                $(o).find('.is-selected').text('√');
            });
        });

        //取消全选
        $(document).on("click","#projectTableContainer .footer .cancel-all",function () {
            $('#projectTableContainer table tbody tr').each(function (i,o) {
                $(o).removeClass('checked');
                $(o).find('.is-selected').text('');
            });
        });

        //确定选择,添加已选项目到项目范围
        $(document).on("click","#projectTableContainer .footer .select-project-btn",function () {
            var projectsContainer = $('#projects');
            $('#projectTableContainer table tbody tr').each(function (i,o) {
                if($(o).hasClass('checked')){
                    var data = $(o).data('project');
                    var item = '<div class="project-item"><span class="rm-item">x</span>'+data.name+'<input type="hidden" name="project_id[]" value="'+data.id+'"></div>'
                    projectsContainer.append(item);
                }
            });

            bootbox.hideAll();
        });

        //取消选择
        $(document).on("click","#projectTableContainer .footer .cancel-project-btn",function () {
            bootbox.hideAll();
        });

    });

    //验证公司、用户是否为空
    var validate = function(){
        var customer_id = $('#customer_id').val();
        var company_code = $('#company_code').val();
        var type = $('input[name="type"]:checked').val();
        var submit = true;
        var errortxt = '';
        if(type==2 && utils.isEmpty(company_code)){
            submit = false;
            errortxt += '请先选择企业';
        }
        if(utils.isEmpty(customer_id)){
            submit = false;
            errortxt += utils.isEmpty(errortxt) ? '请先选择用户': '<br/>请先选择用户';
        }
        if(!submit){
            $('#hid_select-project').html(errortxt);
            return false;
        }
        $('#hid_select-project').html(''); //已选择信息清空提示信息
        return true;
    };

    var projectTable = null;
    //查询用户信息
    var keyupHandle;
    var searProject = function () {
        var customer_id = $('#customer_id').val();
        var company_code = $('#company_code').val();
        var type = $('input[name="type"]:checked').val();
        var noDataTxt = utils.isEmpty(company_code)? '没有查询到项目,请重新选择用户': '没有查询到项目,请重新选择企业或用户';
        keyupHandle && clearTimeout(keyupHandle);
        keyupHandle = setTimeout(function () {
            if (!utils.isEmpty(customer_id)) {
                App.blockUI({
                    target: "#projectTableContainer",
                    message: "加载中..."
                });
                $.ajax({
                    type: "GET",
                    url: "/collection/query-projects",
                    data: {
                        customer_id: customer_id,
                        company_code: company_code,
                        type: type,
                    },
                    success: function (data) {
                        App.unblockUI("#projectTableContainer");

                        projectTable && projectTable.destroy();

                        var projectDataHTML = tmpl("project_data_tmpl", {
                            projects: data
                        });

                        $("#projectTableContainer").html(projectDataHTML);
                        projectTable = $('#projectTable').DataTable({
                            paging: false,
                            searching: false,
                            ordering: false,
                            info: false,
                            language: {
                                emptyTable: noDataTxt,
                            },
                        });
                        //开始是放在外面的
                        //项目是否已选择
                        isCheckedProject();
                    },
                    error: function () {
                        App.unblockUI("#projectTableContainer");
                        $("#userTableContainer").html('<div class="text-center">服务器异常,请稍后再试</div>');
                    }
                });
            } else {
                projectTable && projectTable.destroy();

                var projectDataHTML = tmpl("project_data_tmpl", {
                    projects: []
                });

                $("#projectTableContainer").html(projectDataHTML);
                    projectTable = $('#projectTable').DataTable({
                    responsive: true,
                    paging: false,
                    searching: false,
                    ordering: false,
                    info: false,
                    language: {
                        emptyTable: noDataTxt,
                    }
                });
            }
        }, 200);
    };

    //切换项目类别
    var selectType = function(){
        $(this).parent().children('li').removeClass('active');
        $(this).addClass('active');
        var type = $(this).data('type');
        $('#projectTable tbody tr').each(function (i,o) {
            if($(o).hasClass(type)){
                $(o).show();
            }else{
                $(o).hide();
            }
        });
    };

    //是否存在已选项目
    var isCheckedProject = function(){
        var projectIds = [];
        $('input[name="project_id[]"]').each(function (i,o) {
            projectIds.push($(o).val());
        })
        if(projectIds.length>0){
            console.log(projectIds);
            console.log($('#projectTableContainer table tbody tr'));

            $('#projectTableContainer table tbody tr').each(function (i,o) {
                var data = $(o).data('project');
                console.log(data);
                if($.inArray(data.id,projectIds)!=-1){
                    $(o).addClass('checked');
                    $(o).find('.is-selected').text('√');
                }
            });
        }
    };

    //删除项目
    $('.select-project-list').on('click','.project-item .rm-item',function () {
        $(this).parent().remove();
    });
},

}

page.init();

html

<!--项目-->
<script type="text/html" id="projectselector_tmpl">
    <div class="row">
        <div class="col-md-12" id="projectTableContainer"></div>
    </div>
</script>

<script type="text/html" id="project_data_tmpl">
    <div class="header">
        <ul>
            <?php foreach ($dept as $k=>$item){ ?>
                <li data-type="<?=$item['id']?>"><?=$item['alia_name']?></li>
            <?php } ?>
        </ul>
    </div>
    <table class="table table-bordered table-hover" id="projectTable" style="width:100%;">
        <thead>
        <tr>
            <th data-priority="1">项目名称</th>
            <th data-priority="2">选择</th>
        </tr>
        </thead>
        <tbody>
        <% for(var n in projects) {
        var project = projects[n];
        %>
        <tr data-project='<%=JSON.stringify(project)%>' id="<%=project.id || ''%>" class="<%=project.dept_id || ''%>">
            <td><%=project.name || ""%></td>
            <td class="is-selected"></td>
        </tr>
        <% } %>
        </tbody>
    </table>

    <div class="footer">
        <div class="radio-box">
            <div class="btn radio select-all">全部项目</div>
            <div class="btn radio cancel-all">取消全选</div>
        </div>
        <div class="foot-btn">
            <button type="button" class="btn select-project-btn">确定选择</button>
            <button type="button" class="btn default cancel-project-btn">取消选择</button>
        </div>
    </div>
</script>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值