无法在初始化之前调用表上的方法;试图调用方法“刷新”
Posted
技术标签:
【中文标题】无法在初始化之前调用表上的方法;试图调用方法“刷新”【英文标题】:Cannot call methods on table prior to initialization; attempted to call method 'refresh' 【发布时间】:2020-02-03 02:21:57 【问题描述】:我想列出从数据库表到 html 页面的所有数据。目前一共3行数据,但只列出了2行数据。
HTML。
<script src="lib/jquery-1.11.2.min.js"></script>
<script src="lib/jquery.mobile-1.4.5.min.js"></script>
<div class="expandable-content">
<div id="SearchResult" class="ui-content">
<table data-role="table" data-mode="reflow" class="uiresponsive" id="CoTable">
<thead>
<tr>
<th>User</th>
<th>Personnel</th>
<th>License</th>
</tr>
</thead>
<tbody id="mybody"></tbody>
</table>
</div>
</div>
JS.
function searchperson()
var xmlhttp = new XMLHttpRequest();
var url = serverURL() + "/searchfriends.php";
url += "?userid=" + localStorage.getItem("userid") + "&search=" +
$("#search").val();
xmlhttp.onreadystatechange = function ()
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
getSearchResults(xmlhttp.responseText);
xmlhttp.open("GET", url, true);
xmlhttp.send();
function getSearchResults(response)
var arr = JSON.parse(response);
var i;
$("#mybody").find("tr").remove();
for (i = 0; i < arr.length; i++)
$("#mybody").append("<tr><td>" + arr[i].userid +
"</td><td>"
+ arr[i].personnel + "</td><td>"
+ arr[i].license + "</td></tr>");
$('#Results').bind('pageinit', function ()
$('#CoTable').table('refresh');
//$("#CoTable").table('refresh');
我希望列出所有数据,但只列出了 2 行数据。 [未捕获的错误:。] 我使用了 jquery 移动页面 ID,它消除了错误,但仍然缺少数据。请帮忙,非常感谢。
【问题讨论】:
当页面加载时,你需要做$("#CoTable").table()
(可能的选项作为参数)来初始化表格。
见api.jquerymobile.com/table的例子
@Barmar api 提到如果表上有data-mode="reflow"
,它将自动初始化。因此,这可能更多是调用 getSearchResults
的时间问题。
@Taplar 大概是在执行搜索的 AJAX 请求的回调中调用的。所以 jquery-mobile 库应该已经加载了。
删除pageinit
函数。添加$('#CoTable').table('rebuild');
。
【参考方案1】:
对于 JQM 表小部件,该方法称为 rebuild
(参考:https://api.jquerymobile.com/table/)。
由于 http 请求的异步行为,您可能不知道何时会收到响应,因此恕我直言,处理该响应的最简单方法是检查表小部件是否已经实例化,并且然后调用需要的方法:
function isInstanceOf(id, widget)
var el = document.getElementById(id);
return !!$.data(el, 'mobile-' + widget);
function addRow(id, evt)
var html = '',
$table = $('#' + id),
isInstance = isInstanceOf(id, 'table'),
tableMethod = isInstance ? 'rebuild' : null;
html += '<tr>';
html += '<td>' + id + '</td>';
html += '<td>' + evt + '</td>';
html += '<td>' + isInstance + '</td>';
html += '<td>' + (isInstance ? tableMethod : '[create]') + '</td>';
html += '</tr>';
$table.find('tbody').append(html);
$table.table(tableMethod);
$(document).ready(function()
addRow("CoTable", "DomReady");
);
$(document).on("pagecontainercreate", function(e, ui)
addRow("CoTable", e.type);
);
$(document).on("tablecreate", function(e, ui)
addRow(e.target.id, e.type);
);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.css" />
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.js"></script>
</head>
<body>
<div data-role="page">
<div data-role="header" data-theme="b">
<h1>jQuery Mobile Table</h1>
</div>
<div data-role="content">
<table data-role="table" data-mode="reflow" id="CoTable" class="ui-responsive">
<thead>
<tr>
<th data-priority="1">Id</th>
<th data-priority="persist">Source</th>
<th data-priority="2">Instanced</th>
<th data-priority="3">Method</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</body>
</html>
不用担心event
序列。
这里是一个笨蛋:https://plnkr.co/edit/S8m8BPYnsfUFklYLwEz7?p=preview
【讨论】:
以上是关于无法在初始化之前调用表上的方法;试图调用方法“刷新”的主要内容,如果未能解决你的问题,请参考以下文章
错误:无法在初始化之前调用自动完成的方法;试图调用方法“销毁”
未捕获的错误:在初始化之前无法调用可拖动的方法;试图调用方法“禁用”
jQuery mobile +主干:无法在初始化之前调用listview上的方法