JQuery .on('click') 在 DataTables 第二页或超过 11 的行中不起作用

Posted

技术标签:

【中文标题】JQuery .on(\'click\') 在 DataTables 第二页或超过 11 的行中不起作用【英文标题】:JQuery .on('click') not working in DataTables 2nd page or rows past 11JQuery .on('click') 在 DataTables 第二页或超过 11 的行中不起作用 【发布时间】:2014-10-14 09:42:56 【问题描述】:

我有一个 jQuery 链接,当点击超链接时,它会在每一行的动态列表上运行。

这在应用数据表之前有效,但是一旦数据表应用到第 11 行(在将显示更改为高于默认值 10 之后)或在另一个页面上时,将不再调用 jQuery。

我尝试将它扔到 jsFiddle 中并且它在那里工作,所以由于某种原因我无法在 jsFiddle 中重现它。

非常感谢任何正确方向的指针。

php

echo "<table id='paginatedTable'>";
echo "<thead><th>Test1</th><th>Test2</th></thead><tbody>";
foreach($array as $arr)
 echo "<tr><td>" . $arr['test1'] . "</td><td><div class='test'>";
 echo "<a href='#' class='toggleTest' data-id='". $arr['id']."' id='test-" . $arr['id'] . "'>" . $arr['test2'] . "</a>";
 echo "</div></td></tr>";

echo "</tbody></table>";

jQuery

​​>
$(function()
    $('.test').on('click', '.toggleTest', function(e)
        var id = $(this).data('id');
        $("#test-"+id).html("Done");
        return false;
    );
);

$(document).ready(function() 
    $('#paginatedTable').dataTable();
 );

【问题讨论】:

【参考方案1】:

您需要将处理程序绑定到静态元素,而不是可以动态添加的行。所以应该是:

$("#paginatedTable").on("click", ".test .toggleTest", function ...);

【讨论】:

成功了,我认为它必须是父元素,但任何包装它的静态元素似乎都可以工作!万分感谢。计时器允许时我会接受答案 我认为悬停是一样的,但我正在努力解决它。有什么建议吗? 悬停很特别,因为它不是一个真正的事件。它只是在一个地方为mouseentermouseleave 定义处理程序的简写。使用.on 时,您必须明确执行此操作。 mouseentermouseleave 在不同的功能中运行良好。再次感谢! 谢谢。为我工作。【参考方案2】:

我已关注@Barmar 的回复。

除此之外,我将 on click 包装到 document.ready 函数中,然后它对我有用。

$(document).ready(function() 

$('#dmtable tbody').on( 'click', 'tr td.details-control', function () 


 );

【讨论】:

【参考方案3】:

这里可能会出错:

您的事件绑定在被替换的元素上,您应该使用类似:$('#paginatedTable').on('click', '.toggleTest', function(e) 您似乎没有转义您的 html,因此数据可能会破坏它:htmlspecialchars($arr['test2'])(而不仅仅是 $arr['test2'],也可以应用于其他变量)

【讨论】:

【参考方案4】:

我刚刚found 的另一个简单解决方案是添加一个函数,该函数使用组件处理程序在任何 DataTables 重绘上升级 DOM。

可以像这样使用:

$(document).ready(function()
    var table = $('#table-1').DataTable( 
        "fnDrawCallback": function( oSettings ) 
            componentHandler.upgradeDOM();
        
    );
);

当我在其中一列中使用下拉菜单时,它解决了我的分页问题。

【讨论】:

我不确定为什么没有对此投票。这个解决方案对我有用。 它不工作给出错误 Uncaught ReferenceError: componentHandler is not defined @MohneeshAgrawal - ComponenHandler 只是示例。您可以调用自己的函数。请注意,大卫哈根的回答是有效的。

以上是关于JQuery .on('click') 在 DataTables 第二页或超过 11 的行中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

JQuery .on('click') 在 DataTables 第二页或超过 11 的行中不起作用

jQuery 中的多个链式 .on('click') 事件侦听器

关于jquery中on绑定click事件在苹果手机失效的问题

关于jquery中on绑定click事件在苹果手机失效的问题

jquery on()绑定的点击事件在js动态新添加的元素上无效,请问为啥

Coffeescript JQuery on click 仅在页面刷新时有效