Jquery无法访问Ajax创建的元素

时间:2017-05-24 18:41:56

标签: javascript jquery ajax elements

我有一个

  1. html表(里面有tbody)

  2. jquery function1:$ .ajax - 从数据库中获取数据,并用数据行填充表格(每行都是带tds的tr)

  3. jquery function2:计算表的行数 ($(' tbody')。find(' tr')。length)

  4. 所以2工作正常,用行填充1,但3不起作用(虽然它适用于表格,填充"手工和#34;,例如不用ajax填充的)。 / p>

    注意:当我在console.log($(' table')[0])时返回:

    <table>
    <tbody> 
    <tr> <td>1</td> </tr>
    <tr> <td>2</td> </tr>**
    </tbody> 
    </table>
    

    当console.log($(&#39; tbody&#39;)[0])返回时:

    <tbody></tbody>
    

    (它内部没有发现!)

    我知道它与Ajax动态内容有关。

    • 我应该做些什么来使(3)工作?
    • 为什么console.log会显示&#34; table&#34;的trs,而不是&#34; tbody&#34;?
    • 我应该阅读什么才能理解这一切,而不是对此提出疑问 在这里?:)

    提前谢谢大家!

    PS。 Ajax-call(真实):

                function load_tours () {
    
                        $.ajax({
    
                            type: 'get',
                            url: 'load_tours',
                            data: $('#search-form').serialize(),
                            success:function (data) {
    
                                $('#tours_table').empty();
    
                                tableCreate(data);
    
                                }           
                            });
    
            };
    
            function tableCreate (data) {
    
                $.each( data, function (i, item) {
    
                var tr = $('<tr>').append(
                    $('<td>').text(item.id),
                    $('<td>').text(item.name),
                    $('<td>').text(item.lastName);
                 $('#tours_table').append(tr);
    
                });
            };
    

    行计数器:

    rowCount = $("#tours_table").find('tr').length;
    

    这里的PPS是(临时)真实页面:

    http://81b29c97.ngrok.io/test2(HTML) http://81b29c97.ngrok.io/js/tours_load_filter.js(JS 1)http://81b29c97.ngrok.io/js/sort_paginate.js(JS 2)

1 个答案:

答案 0 :(得分:0)

尝试使用.always()事件在完成Ajax调用后计算行

此外,您应该从success更改为done事件,因为第一个事件已被弃用。

  

弃用通知:从jQuery 3.0开始,jqXHR.success(),jqXHR.error()和jqXHR.complete()回调被删除。您可以使用jqXHR.done(),jqXHR.fail()和jqXHR.always()代替。

参考:jQuery API documentation

$.ajax({
    type: 'get',
    url: 'load_tours',
    data: $('#search-form').serialize()
    }).done(function(){
        $('#tours_table').empty();
        tableCreate(data);
    }).always(function(){
        alert($('#tours_table tr').length);
    });        
});