【问题标题】:Using list.js sort and search not working使用 list.js 排序和搜索不起作用
【发布时间】:2013-12-29 23:37:12
【问题描述】:

这是我第一次使用 list.js,但由于某种原因它无法正常工作。

这是一个活生生的例子。 http://hartslogmuseum.com/bookhjr10/test.php 这是它应该做的 http://listjs.com/examples

这是我的代码。我只想搜索名称。

<div class="table-responsive">
<div id="catalog">
<input class="search" placeholder="Search" />
  <button class="sort" data-sort="name">
    Sort Name
  </button>
  <button class="sort" data-sort="cat">
    Sort Category
  </button>
 <h2> Catalog </h2>
<table class="list table-bordered table-striped">
<tr>
<td> <h2 class="name">Item Name</h2> </td>
<td><h2 class="cat">Item Category</h2></td>
<td> <h2>Thumbnail</h2></td>
<td> <h2 class="descr">Item Desc</h2> </td>
<td> <h2 class="time">Time Frame</h2> </td>
<td> <h2 class="donor">Donor</h2> </td>


</tr>
$resultSet = mysqli_query($conn,"SELECT * FROM bookhjr10_items");

While($row = mysqli_fetch_array($resultSet))
{
$i=0;   
echo "<tr>";
echo "<td class=\"name\">".$row['name']. "</td>";
echo "<td class=\"cat\">".$row['category']. "</td>";
echo "<td><a href=\"fullimage.php?id=".$row['id']."\" data-lightbox=\pic\"><img src=\"image.php?id=".$row['id']."\" alt=\"thumb-1\" /></a></td>";
echo "<td class=\"descr\">". $row['descr'] . "</td>";
echo "<td class=\"time\">". $row['time'] . "</td>";
echo "<td class=\"donor\">". $row['donor'] . "</td>";
echo "</tr>";
$i++;
}

?>
</table>
</div>
      </div>
      <script type="text/javascript">
var options = {
    valueNames: [ 'name' ]
};

var hackerList = new List('catalog', options);
</script>

【问题讨论】:

  • 你做了什么来调试问题?您在控制台中收到任何错误吗? edit: 如果你查看控制台,你会得到一堆这样的错误:Failed to load resource: the server responded with a status of 404 (Not Found)。找不到您的某些脚本(例如 jQuery)。
  • 我试过更改类名。我没有收到任何错误。当我在搜索框中输入时,一切都消失了。这就是它应该做的,只显示你输入的内容,但由于某种原因它不能那样工作。是的,那些是我不需要的东西。我把它们拿出来了。
  • 我只需要listjs.com/overview/download list.ls 是否正确?我不需要做任何其他事情吗?

标签: javascript listjs


【解决方案1】:

您可能忘记了最低要求之一。

这些似乎是最低要求:

  1. 调用list.js时指明表的父元素ID
  2. 表的tbody 必须有类list
  3. 如果表已经有项目(我会假设大多数情况),选项的 valueNames 参数是强制性的。这些值是您要排序的列的类名(类名在 EACH td 中定义,而不是在 th 上 - 尽管您也可以将其添加到 th)。
  4. 用于排序的表头必须有一个名为sort的类
  5. 用于排序的表头必须有一个属性data-sort,其值与要排序的列的类名匹配

这里有几个使用表格的 list.js codepen 示例(来自http://listjs.com/examples/add-get-remove):

最小代码示例:

另见http://jsfiddle.net/d7fJs/

<!-- for a table with a parent div of id "my-cool-sortable-table-wrapper", -->
<!-- and columns of class names "gender", "age" & "city" -->

<div id="my-cool-sortable-table-wrapper">
    <table>
        <thead>
            <th class="sort" data-sort="gender">Gender</th>
            <th class="sort" data-sort="age">Age</th>
            <th class="sort" data-sort="city">City</th>
        </thead>
        <tbody class="list">
            <tr>
                <td class="gender">male</td>
                <td class="age">18</td>
                <td class="city">Berlin</td>
            </tr>
            <tr>
                <td class="gender">female</td>
                <td class="age">46</td>
                <td class="city">Reykjavik</td>
            </tr>
            <tr>
                <td class="gender">female</td>
                <td class="age">20</td>
                <td class="city">Lisboa</td>
            </tr>
            <!-- and so on ...-->
        </tbody>
    </table>
</div>

<script src="//cdnjs.cloudflare.com/ajax/libs/list.js/1.1.1/list.min.js"></script>
<script type="text/javascript">
    var options = {
        valueNames: [ 'gender', 'age', 'city' ]
    };
    var contactList = new List('my-cool-sortable-table-wrapper', options);
</script>

注意:如果排序行为异常 - 即。排序不正确 - 这可能是因为您缺少基本要求之一。如果您遇到困难,请做一个 jsfiddle 并在 stackoverflow 上提出您的问题并附上指向它的链接。


如果您想避免在包装元素中使用此 ID,而是使用自定义选择器,您可以替换:

var contactList = new List('my-cool-sortable-table-wrapper', options);

通过这个:

var wrapperElement = $('.my .custom .selector');
var contactList = new List(wrapperElement[0], options);

见:


如果您想检测由List.js 触发的更改事件并采取相应措施(这里我们相应地更新行类名称)

contactList.on("updated", function(){
    $('#my-cool-sortable-table-wrapper tr').removeClass('odd').filter(':visible:odd').addClass("odd");
})

List.js 处理不同的事件类型。查看this page http://listjs.com/docs/list-api底部的完整列表


官方文档http://listjs.com/docs/options

【讨论】:

  • 对于搜索/过滤,另一个(似乎没有记录)要求似乎是搜索 必须在调用 List 构造函数时指定的 div 中(以及具有类“搜索”)。我意识到 OP 只是在询问排序,但您的答案比官方文档更普遍适用并且更适合以 List.js 为导向,所以想在这里为其他人做一个说明。
【解决方案2】:

将 list.js 与表格一起使用时,您应该将 class="list" 添加到 &lt;tbody&gt; 标记而不是 &lt;table&gt; 标记。

所以在你的代码中改变这部分:

<table class="list table-bordered table-striped">
<tr>

<table class="table-bordered table-striped">
<tbody class="list">
<tr>

别忘了添加&lt;/tbody&gt;

【讨论】:

    【解决方案3】:
    ***Add php tag before you start php code in an html content.***
    //You can refer to below example:
    <div class="table-responsive">
    <div id="catalog">
    <input class="search" placeholder="Search" />
      <button class="sort" data-sort="name">
        Sort Name
      </button>
      <button class="sort" data-sort="cat">
        Sort Category
      </button>
     <h2> Catalog </h2>
    <table class="list table-bordered table-striped">
    <tr>
    <td> <h2 class="name">Name</h2> </td>
    </tr>
    <?php   
    $sql="SELECT * FROM country";
    $resultSet = mysql_query($sql,$conn);
    while($row = mysql_fetch_array($resultSet))
    {?>
    <tbody >
    <tr><td class="name">
    <?php 
    $i=0;   
    echo $row['cn_name'];
    $i++;
    }?>
    </td></tr>
    </tbody>
    </table>
    </div>
          </div>
    //Javascript
    <script src="http://listjs.com/no-cdn/list.js"></script>
    
          <script type="text/javascript">
    var options = {
        valueNames: [ 'name' ]//you can specify more columns by adding ,
    };
    
    var hackerList = new List('catalog', options);
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-19
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 2021-08-09
      • 2017-02-22
      相关资源
      最近更新 更多