我正在使用JQM 1.4.2创建一个小型应用程序,但遇到了一个问题,即我在不使用Ajax刷新页面的情况下更新表。这很好用,并且我的表(整个表)在更新后已更新,data- mode='columntoggle'但不再起作用-按钮在那里,但是您为显示列所做的任何选择都不再起作用。
data- mode='columntoggle'
谁能想到发生这种情况的原因?代码如下:
主页
<div data-role="content" data-theme="a" > <div id='visualUnitTable'> <!-- list loads dynamically - popup & jquery at bottom of page --> </div> <!------------------POPUP------------------- --> <div data-role='popup' id='popupVisualUnit' data-theme='a' data-overlay-theme='a' data-dismissible='false' style='min-width: 300px;'> <div data-role='header' data-theme='a'> <h1>Visual Check</h1> </div> <div data-role='main' class='ui-content'> <form id='frmVisualUnit'> <!--using ajax to create the form--> </form> </div> </div> </div><!-- /content -->
表格页面(为了便于阅读,我从这里删除了php的负载!):
<table data-role='table' id='visualUnitListTable' data-mode='columntoggle' class='ui-body-b ui-shadow table-stripe ui-responsive' data-column-btn-mini='true' data-column-btn-text='Columns to Display' data-column-btn-theme='c' data-column-popup-theme='a' > <thead> <tr> <th data-priority='1'>Unit No.</th> <th data-priority='1'>Size Code</th> <th data-priority='2'>Size</th> <th data-priority='3'>Week Rate</th> <th data-priority='3'>Month Rate</th> <th data-priority='2'>Overlocked</th> <th data-priority='2'>Visual Check</th> <th data-priority='1'>Status</th> <th></th> </tr> </thead> <tbody> echo"<tr> <td><a href='./unit_Details.php?unitid=" . $row['unitid'] . "'>" . $row['unitno'] . "</a></td> <td>" . $row['sizecode'] . "</td> <td>" . $row['usize'] . "</td> <td>" . $row['wrate'] . "</td> <td>" . $row['mrate'] . "</td> <td>" . $row['overlocked'] . "</td> <td>" . $row['visual'] . "</td> <td>" . $row['description'] . "</td> <td><div id='custom-border-radius'><a onclick= DisplayVisualCheckPopUP('" . $row ['unitid'] ."') class='ui-btn ui-icon-edit ui-btn-icon-notext ui-corner-all' data-rel='popup' data-position-to='window' data-transition='pop'>" . $row['unitno'] . "</a></div></td> </tr> </tbody> </table>
单击编辑按钮以打开一个弹出窗口,当您关闭窗口时,将使用更新后的信息重新编写表格。ajax重新加载表而不刷新整个页面:
function LoadVisualUnitTable() { $.post('unit_DisplayVisualTable.php', 'unitSearchBox=<?php echo $_POST ['unitSearchBox'];?>&choiceUnitSearch=<?php echo $_POST ['choiceUnitSearch'];?>&choiceDeletedUnit=<?php echo $_POST ['choiceDeletedUnit'];?>&selectSiteUnit=<?php echo $_POST ['selectSiteUnit'];?>&choiceUnitSearchCri=<?php echo $_POST ['choiceUnitSearchCri'];?>&selectUnitStatus=<?php echo $_POST ['selectUnitStatus'];?>&sid=RI201310111345581600', function(data) { $("#visualUnitTable").html(data); //<!-- load data to div --> $("#visualUnitTable").trigger('create'); //<!-- load data to css --> }); return false; };
我当时在想,也许我只需要逐行重新加载-有什么想法吗?否则,任何想法将不胜感激!谢谢
看起来jQM会从表的第一次加载中保留弹出列表的列列表,因此在后续加载之后,它不会重新创建列表。可能有一种更“正式”的方法来执行此操作,但是一种快速的解决方法是每次刷新表时就从DOM中删除动态弹出窗口:
$("#visualUnitListTable-popup-popup").remove(); $("#visualUnitTable").html(data).enhanceWithin();
给定您的表ID visualUnitListTable,jQM会创建一个ID为的弹出窗口visualUnitListTable-popup- popup,因此您可以在更新表HTML之前立即在该元素上调用remove()。
visualUnitListTable
visualUnitListTable-popup- popup
这是一个 演示