【发布时间】:2017-05-24 18:41:56
【问题描述】:
我有一个
html表格(里面有tbody)
jquery function1: $.ajax - 从数据库中获取数据并用数据行填充表(每一行都是tr with tds)
jquery function2:统计表的行数 ( $('tbody').find('tr').length )
所以 2 可以正常工作,用行填充 1,但 3 不起作用(尽管它适用于“手动”填充的表格,例如,不适用于 ajax 填充的表格)。
注意:当我 console.log($('table')[0]) 返回时:
<table>
<tbody>
<tr> <td>1</td> </tr>
<tr> <td>2</td> </tr>**
</tbody>
</table>
当 console.log($('tbody')[0]) 返回时:
<tbody></tbody>
(里面看不到 trs!)
我知道这与 Ajax 动态内容有关。
- 我应该怎么做才能使 (3) 起作用?
- 为什么console.log 显示“table”的trs,而不显示“tbody”的trs?
- 我应该阅读什么来理解这一切而不是质疑它 来过这里吗?:)
提前谢谢大家!
PS。 Ajax 调用(真实):
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)
【问题讨论】:
-
你能把 Ajax 调用连同你的函数和 HTML 一起发布吗?
-
没有看到代码,我猜这是由于竞争条件,您在返回之前检查信息。确保 Ajax 调用已完成,并且在检查行之前已填充行。
-
好的,克里斯,但是为什么 console.log($('table')) 会在 tbody 中显示
,而 console.log($('tbody')) 不会' t? var count = $('#tours_table tr').length;alert(count);还有你在哪里调用计数器代码?同意这听起来像是一个竞争条件,您应该在修改 AJAX 请求中的表后执行此操作,查看 Promise 以便更好地了解异步和并行的工作原理:)跨度>
标签: javascript jquery ajax elements