点击按钮进行DataTables搜索,而不是在输入框中输入

6

我想知道是否可能将由 DataTables 修改的表格中的搜索功能移出到一个 input 之外。目前,我有一个自定义输入框来执行此功能:

<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>

然而,当我点击按钮时,它并不起作用。在撰写这个问题的过程中,我意识到这可能是因为当我点击按钮时,它不知道从哪里获取筛选文本以实际过滤表格。

有没有办法让按钮单击引用输入,然后去过滤表格?

2个回答

10

您是正确的,您需要重新定义$(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中时,有没有一种方法可以使用回车键来触发此函数? - CBreeze
有趣的是,它确实执行了搜索,但同时也刷新了页面。 - CBreeze
通常这意味着它在捕获回车并提交的表单内部。编辑传入内容。 - James Hill
试一试,@CBreeze - James Hill
1
太棒了。我会仔细研究这个工作原理,并在有能力时接受这个答案。谢谢。 - CBreeze

0

这对我有效

let datatable = $('#reg_users').DataTable({
    'processing': true,
    'serverSide': true,
    'serverMethod': 'GET',  
    'ajax': { 'url':'<?=$url?>adminActions.php?action=FETCH_USERS' },
    'columns': [ 
        { data: 'index' }, 
        { data: 'user_registered' }, 
        { data: 'full_name' },
        { data: 'email_address' },
    ],
    search: {
        return: true
    } 
}); 

$("#reg_users_filter").append(`<button id="searchbtn">Search</button>`);

$("#searchbtn").click(e =>{  
        datatable.search($('#reg_users_filter input').val()).draw(); 
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接