【问题标题】:picnet table filter not working with dynamic tablepicnet 表过滤器不适用于动态表
【发布时间】:2011-12-17 12:26:13
【问题描述】:

您好,我在同一页面的两个表中使用 Picnet 表过滤器。 其中之一是在我的 js 文件中动态生成的,该文件使用 AJAX 从 MySQL 数据库中检索数据。 另一个有硬编码数据。

动态生成的那个是不工作的。 (我创建了一个硬编码只是为了看看问题是否与此有关) 一开始我还在我的 js 函数中生成“thead”和“th”标签,但是当我收到一个错误说“thead”未定义时,我将该代码移到 HTML 文件中......目前我只是添加通过附加功能将“tr”和“td”添加到“tbody”......但过滤器不起作用。对于组合框过滤器,唯一的选项是“选择..”,其他应该根据列数据生成的选项不是。

您知道这里可能存在什么问题吗? 在此先感谢...莫妮卡

HTML 代码:

<table id="tablaReservas" border="1">
<thead>
<tr><th>Reserva#</th><th filter-type="ddl">Recurso</th><th>Inicio</th><th>Fin</th>th>Responsable</th><th>Usuario</th></tr>
</thead>
<tbody>
</tbody>
</table>

Quick Find: <input type="text" id="quickfind"/><a id="cleanfilters" href="#">Clear Filters</a>

<table id='demotable'>
<thead>
<tr><th filter-type="ddl">Col1</th><th>Col2</th><th>Col3</th></tr>
</thead>
<tbody>
<tr><td>Value 1</td><td>Value 2</td><td>Value 3</td></tr>
<tr><td>Value 4</td><td>Value 6</td><td>Value 8</td></tr>
<tr><td>Value 5</td><td>Value 7</td><td>Value 9</td></tr>
</tbody>
</table>

Javascript 代码:

$(document).ready(inicializar);

function inicializar(){     
traerReservas();    

var options = { additionalFilterTriggers: [$('#quickfind')], clearFiltersControls: [$('#cleanfilters')]};


$("#tablaReservas").tableFilter(options);
$("#demotable").tableFilter(options);         
}

function traerReservas(){
$.ajax({async:true,
url:"../Persistencia/procesaConsultaReservas.php",
type:"POST",
datatype:"json",
success:mostrarTabla,
error:mensajeTablaReservas, 
});
}

function mostrarTabla(data){
var d= eval('(' + data + ')');  

if (data!=0) {
for (i=0; i < d.length; i++) {      
var tr= $("<tr id='" + d[i].id + "' onclick=mostrarRecursos(" + d[i].id + ");>" +
"<td>" + d[i].id + "</td>" + 
"<td>" + d[i].nombre + "</td>" + 
"<td>" + d[i].inicio + "</td>" + 
"<td>" + d[i].fin + "</td>" + 
"<td>" + d[i].responsable + "</td>" + 
"<td>" + d[i].usuario + "</td>" + 
"</tr>");

$("#tablaReservas tbody").append(tr);   
}
}       
}

【问题讨论】:

    标签: javascript


    【解决方案1】:

    使用过滤器的一种方法是直接访问表列 ID。尽管这种方法可能不是正确的方法,但它确实有效。

    表的每一列都被标识为filter_0、filter_1等等。因此,将要过滤的值直接传递给列。

    $('#filter_0').val('pass your value here'); 
    

    这适用于动态生成或硬编码的表。但是,如果同一页面中有多个表,您可以使用 .closest 方法相应地识别和修改您的代码。 希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      1) 创建一个连接到服务器并动态获取数据的 JSP 页面。

      2) 加载表体中的JSP数据并初始化搜索插件

      $('#demotable tbody').load('fetchedData.jsp',function(){
        var options = { additionalFilterTriggers: [$('#quickfind')], clearFiltersControls:  [$('#cleanfilters')]};
      
        $("#demotable").tableFilter(options);
        //Define other functions for event trigger
      });       
      

      这对我有用!!!

      【讨论】:

        【解决方案3】:

        在document.ready中初始化PicNet表:

        $(document).ready(function() {
            $('#m-stats-table').tableFilter();
        });
        

        然后,在你的 ajax 语句的成功回调中,刷新过滤器:

        $('#m-stats-table').tableFilterRefresh();
        

        此外,请确保在加载前清除表时,不会删除初始 picnet 过滤器。

        应该可以的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-10
          • 1970-01-01
          • 1970-01-01
          • 2016-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-08
          相关资源
          最近更新 更多