带有.thoggle()的jQuery点击处理程序不适用于数据表



我在div中有一些数据表,我想通过单击图像来".thoggle()"隐藏或显示这些表(这很有效)。在初始化数据表之后,我的点击处理程序仍然每次都会触发,但$(this)只在最后一个元素上是正确的。每隔一个元素$(this)都是"prevObject",它不适用于.thoggle().

<div class='toggle'>
  <img src='/some/path/foo.jpg'>
  <table class='dt'>
     ...
  </table>
</div>
<div class='toggle'>
  <img src='/some/path/foo.jpg'>
  <table class='dt'>
     ...
  </table>
</div>
<div class='toggle'>
  <img src='/some/path/foo.jpg'>
  <table class='dt'>
     ...
  </table>
</div>
//This works if I don't initialize datatables
$(".toggle").on("click", "img", function(event) {
    $(this).siblings(".dt").toggle();
});  

你知道$(这个)是怎么回事吗?

EDIT:如果数据表没有初始化,上面的jQuery选择器"$(this)"可以正常工作。初始化后,"$(this)"对除一个元素外的所有元素返回"prevObject"。因此,一个元素在单击时可以正常工作,而其他元素则不能正常工作。

第二版:这里有一个jsfiddle来说明这个问题:http://jsfiddle.net/S6bhL/10/

第三版:在我实际的应用程序中,我不得不使用以下修改后的解决方案:

$(this).parent().parent().find(".dt");
$(this).parent().parent().find(".dataTables_wrapper");
编辑:由于OP更新了问题,这是我更新的答案。

更新JSFIDDLE演示

看起来,每当您单击初始化数据表时,它都会被div dataTables_wrapper包装。所以处理这两个案件。

$(document).ready(function () {
    $(".toggle").on("click", "img", function (event) {
        var $nextDT = $(this).next('.dt');
        var $nextDTWrap = $(this).next('.dataTables_wrapper');
        if ($nextDT.length) {
            $nextDT.toggle();
        } else if ($nextDTWrap.length) {
            $nextDTWrap.toggle();
        }
    });
});
function doit() {
    $(".dt").each(function () {
        $(this).dataTable();
    });
}

相关内容

最新更新