【问题标题】:DataTables search on button click instead of typing in inputDataTables 搜索按钮单击而不是输入输入
【发布时间】:2017-11-28 15:50:36
【问题描述】:

我想知道是否可以将搜索功能从input 中移出DataTables 修改的表。目前我有一个执行此功能的自定义输入:

<script>
    $(document).ready(function() {
        var oTable = $('#staffTable').DataTable();
        $('#searchNameField').keyup(function () {
            oTable.search($(this).val()).draw();
        });
    })
</script>

输入看起来像这样:

<label for="searchNameField" class="col col-form-label">Name:</label>
<div class="col-sm-11">
    <input type="text" class="form-control ml-0 pl-2" id="searchNameField"
            placeholder="Name" autofocus/>
</div>

我想做的是把它移到一个按钮上。我认为可能的情况如下:

<script>
    $(document).ready(function() {
        var oTable = $('#staffTable').DataTable();
        $('#searchButton').click(function () {
            oTable.search($(this).val()).draw();
        });
    })
</script>

按钮看起来像这样:

<button id="searchButton" type="button" class="btn btn-sm btn-success" style="width: 150px">
    <i class="fa fa-search">
        Search
    </i>
</button>

但是,当我单击按钮时,这不起作用。在输入这个问题时,我意识到这可能是因为当我单击按钮时,它不知道从哪里获取过滤器文本以实际过滤表。

有没有一种方法可以让我点击一个引用输入的按钮,然后去过滤表格?

【问题讨论】:

    标签: javascript jquery html datatables


    【解决方案1】:

    你说得对,你需要重新定义$(this),现在指的是按钮,而不是搜索框:

    $(document).ready(function() {
        var oTable = $('#staffTable').DataTable();
        $('#searchButton').click(function () {
            oTable.search($("#searchNameField").val()).draw();
        });
    
        // EDIT: Capture enter press as well
        $("#searchNameField").keypress(function(e) {
            // You can use $(this) here, since this once again refers to your text input            
            if(e.which === 13) {
                e.preventDefault(); // Prevent form submit
                oTable.search($(this).val()).draw();
            }
        });
    });
    

    【讨论】:

    • 完美的詹姆斯,谢谢。当用户在#searchNameField 内时,有没有办法可以使用回车键来触发此功能?
    • 有趣的是,它确实执行了搜索,但同时也刷新了页面..
    • 这通常意味着它位于捕获输入按下并提交的表单内。编辑传入。
    • 试一试,@CBreze
    • 太棒了。我会确保更详细地了解它是如何工作的,并在可能的情况下接受这个答案。谢谢
    猜你喜欢
    • 2013-07-27
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多