【问题标题】:datatables Individual column searching (select inputs) in a different element than footer数据表在与页脚不同的元素中进行单个列搜索(选择输入)
【发布时间】:2019-02-21 13:04:09
【问题描述】:

我正在尝试编辑数据表示例中的选项以使用选择输入,并且他们的示例工作正常。但是,我希望这适用于我已构建下拉列表的另一个元素。

我已经得到它,因此它可以填充下拉列表,这很棒,但是如果我单击任何选项,则没有任何反应。我尝试将.on "change" 更改为"click",但我只是得到.replace 不支持此对象。

这是我的代码。

<div class="hidden-sm hidden-xs" id="htmToolbar">
    <ul class="nav-xs" id="htmTools">
        <li class="dropdown-submenu">
            <a style="cursor: pointer;">Manufacturer &nbsp;<i class="fa fa-th-list"></i></a>
            <ul id="Manufacturer" class="dropdown-menu" id="StartersTool">
                <li class="dropdown-header">Filter By</li>
            </ul>
        </li>
    </ul>
</div>

<div class="hidden-sm hidden-xs" id="htmToolbar">
    <ul class="nav-xs" id="htmTools">
        <li class="dropdown-submenu">
            <a style="cursor: pointer;">Software Tag &nbsp;<i class="fa fa-th-list"></i></a>
            <ul id="SoftwareTag" class="dropdown-menu" id="StartersTool">
                <li class="dropdown-header">Filter By</li>      
            </ul>
        </li>
    </ul>
</div>

<div class="hidden-sm hidden-xs" id="htmToolbar">
    <ul class="nav-xs" id="htmTools">
        <li class="dropdown-submenu">
                <a style="cursor: pointer;">Status &nbsp;<i class="fa fa-th-list"></i></a>
                <ul id="Status" class="dropdown-menu" id="StartersTool">
                    <li class="dropdown-header">Filter By</li>
                </ul>
        </li>
    </ul>
</div>

这是我在函数内部的 Js 代码。

$('#Ttable').DataTable
       ({
                initComplete: function () 
                    {
                    this.api().columns([1,3,4]).every( function () 
                    {
                        var column = this;
                        var select = $('<li style="width:300px;" class="pickList Manlist"></li>')
                            .appendTo( $("#Manufacturer"))
                            .on( 'click', function () 
                            {
                                var val = $.fn.dataTable.util.escapeRegex
                                (
                                    $(this).val()
                                );
                                console.log(val);
                                column
                                    .search( val ? '^'+val+'$' : '', true, false )
                                    .draw();
                            });
                        column.data().unique().sort().each( function ( d, j ) 
                        {
                        select.append( '<option value="'+d+'" class="dropdown-item">'+d+'</option>' )
                        });
                    });
                    },
                    scrollY:"500px",
                    scrollCollapse: true
            }


        );

任何帮助都会非常有用

【问题讨论】:

    标签: javascript jquery datatables datatables-1.10


    【解决方案1】:

    问题在于您附加的内容以及如何注册点击事件。

    首先,您将&lt;option&gt; 附加到&lt;ul&gt;... 这显然是无效标记。我建议你使用一些&lt;li&gt;

    其次,您注册的是整个&lt;ul&gt; 的点击事件,而不是用户点击的&lt;option&gt;(现在是&lt;li&gt;)。这就是获取选项值的.val() 方法失败的原因。

    第三,既然你应该使用&lt;li&gt;,就把.val()换成.text()

    这是一个演示:

    $('#Ttable').DataTable({
      initComplete: function(){
        
        // Have this variable accessible for the whole initComplete
        var column;
        
        // Iterate the column
        this.api().columns([1]).every( function(){
    
          column = this;
          var select = $('<li style="width:300px;" class="pickList Manlist"></li>')
          .appendTo( $("#Manufacturer"));
    
          column.data().unique().sort().each( function ( d, j ){
            select.append( '<li class="dropdown-item">'+d+'</li>' );
          });
        });
        
        // Once all appendings are done, register a click handler
        $("#Manufacturer li.dropdown-item").on( 'click', function(){
            var val = $(this).text();
            console.log(val);
    
            column
              .search( val ? '^'+val+'$' : '', true, false )
              .draw();
          });
      },
      scrollY:"500px",
      scrollCollapse: true
    });
    <link href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.19/css/jquery.dataTables.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.19/js/jquery.dataTables.min.js"></script>
    
    <div class="hidden-sm hidden-xs" id="htmToolbar">
      <ul class="nav-xs" id="htmTools">
        <li class="dropdown-submenu">
          <a style="cursor: pointer;">Manufacturer &nbsp;<i class="fa fa-th-list"></i></a>
          <ul id="Manufacturer" class="dropdown-menu" id="StartersTool">
            <li class="dropdown-header">Filter By</li>
          </ul>
        </li>
      </ul>
    </div>
    
    <table id="Ttable">
      <thead>
        <tr>
          <th>column 1</th>
          <th>column 2</th>
          <th>column 3</th>
          <th>column 4</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>something 1</td>
          <td>something 2</td>
          <td>something 3</td>
          <td>something 4</td>
        </tr>
        <tr>
          <td>something 5</td>
          <td>something 6</td>
          <td>something 7</td>
          <td>something 8</td>
        </tr>
        <tr>
          <td>something 9</td>
          <td>something 10</td>
          <td>something 11</td>
          <td>something 12</td>
        </tr>
      </tbody>
    </table>

    CodePen

    【讨论】:

    • 谢谢我最初是从
    • 标签开始的,但可以让它工作。现在我只需要弄清楚如何同时为几个不同的下拉菜单执行此操作。
  • 为每个下拉菜单使用不同的&lt;li&gt; 类... ;)
  • 谢谢,但您能否在您的示例中向我展示一下,我已经为此苦苦思索了好几个小时,但我不明白您的意思。我用 3 个下拉菜单编辑了我的问题,并在 JS 中添加了 1,3,4 数组列
  • 简单...柱子。附加 &lt;li&gt; 时将添加的类。
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签