【问题标题】:DataTable select plugin and jquery event handler issueDataTable 选择插件和 jquery 事件处理程序问题
【发布时间】:2018-05-25 12:36:49
【问题描述】:

我阅读了几篇文章和jQuery API 文档,了解click()on('click') 除了事件委托之外没有区别。

我在我的页面中使用 Datatables 及其选择插件;我的 Html 标记和脚本与以下代码相同。

<div class='panel'>
    <table class='data-table'>
        <thead>
            <tr>
                <th>Column 1</th>
                <th>Column 2</th>
            </tr>
        </thead>
        <tbody>
            <tr data-id='1'>
                <td>Row 1, 1</td>
                <td>Row 1, 2</td>
            </td>
            <tr data-id='2'>
                <td>Row 2, 1</td>
                <td>Row 2, 2</td>
            </td>
            <tr data-id='3'>
                <td>Row 3, 1</td>
                <td>Row 3, 2</td>
            </td>

        </tbody>
    </table>
</div>

<script>
    $('table tbody tr').click(function(){
        console.log("Click(): " + $('table tr.selected').data('id'));
    });
    $('table').on('click', 'tbody tr', function() {
        console.log("On(Click()): " + $('table tr.selected').data('id'));
    });
</script>

click()on('click') 相同时,我必须获得相同的控制台结果,但我得到的是在选择第一行后 (data-id=1)

On(Click()): undefined
Click(): 1

然后点击第一行的第二行

On(Click()): 1
Click(): 2

我看到on('click()') 在数据表的选择例程之前运行,click() 在相同之后运行。什么是可能的解决方案,以便 click()on(click()) 在数据表选择例程之后执行。

由于我表中的数据集数量庞大,我需要应用委托,即on(click())

更新

在事件中使用this 将允许访问获取选定行,但在数据表中第二次单击同一行将删除选择,因此两个函数的结果应该是undefined

【问题讨论】:

    标签: javascript jquery datatables jquery-events


    【解决方案1】:

    在您的 jquery 选择器中,改用 this 关键字:

    $('table tbody tr').click(function(){
        if($(this).hasClass( "selected" ) == true) {
            console.log("Click(): " + $(this).data('id'));
        }
    });
    $('.data-table').on('click', 'tbody tr', function() {
        if (!$(this).hasClass('selected'))
            console.log("On(Click()): " + $(this).data('id'));
        else
            console.log('nothing selected');
    });
    

    【讨论】:

    • 你是对的,但我还需要计算选择的行数,或者以其他方式我需要知道当前点击后至少选择一行或没有选择行的天气 - 这也是我忘记的要求包括在问题中,我会更正问题。
    • 您可以使用-$( "tr.selected" ).size()查看计数
    • $('tr.selected').size() 最初返回 0。
    • 更新了我的答案。
    • 受您的回答启发!我找到了解决方案,更新了$('.data-table').on('click', 'tbody tr', function() { if (!$(this).hasClass('selected')) console.log("On(Click()): " + $(this).data('id')); });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多