通过AJAX和列切换的JQuery Mobile更新表停止工作

Jan*_*ney 1 ajax jquery jquery-mobile jquery-mobile-ajax

我正在使用JQM 1.4.2创建一个小应用程序,我遇到了一个问题,我在使用ajax更新没有页面刷新的表.这很好用,我的表(整个表)更新但是在更新后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 -->
Run Code Online (Sandbox Code Playgroud)

表页面(香港专业教育学院从这里删除了一堆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>
Run Code Online (Sandbox Code Playgroud)

单击编辑按钮以打开一个弹出窗口,当您关闭时会重新写入包含更新信息的表格.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;
                };
Run Code Online (Sandbox Code Playgroud)

我在想,或许我需要一行一行地重新加载 - 对此有什么看法?否则任何想法将不胜感激!谢谢

eza*_*ker 6

看起来jQM使弹出窗口保留了表的第一次加载时的列列表,因此在后续加载后它不会重新创建列表.有可能是一个更"官方"的方式做到这一点,但一个快速的解决方法是刚刚从DOM每次刷新表时间删除动态弹出:

$("#visualUnitListTable-popup-popup").remove();        
$("#visualUnitTable").html(data).enhanceWithin();
Run Code Online (Sandbox Code Playgroud)

鉴于你的表ID visualUnitListTable,JQM创建具有的ID的弹出visualUnitListTable-popup-popup,这样你就可以正确更新表HTML之前调用remove()的元素.

这是一个DEMO