将单击绑定到 panzoom 容器中的元素

Posted

技术标签:

【中文标题】将单击绑定到 panzoom 容器中的元素【英文标题】:bind click to an element within panzoom container 【发布时间】:2015-03-23 21:17:06 【问题描述】:

我正在使用 jquery.panzoom 来包含一个表。

每个表格单元格都采用这种形式:

<td><div class="cell" id="cell-24-14"></div></td>  

表是动态创建的,所以我用它来尝试捕获一个事件:

$('.cell').on('click', function (e)         
        alert($(this).attr('id'));
);

我已经尝试删除 div,并直接捕获 td 上的点击,但效果不佳。 当我在任何 div 上捕捉点击时,我看到表格的容器正在捕捉点击,但点击永远不会到达表格本身(而不是它的单元格)。

如何在 td(甚至 td)内的单个 div 上捕获点击事件?

【问题讨论】:

你到底想做什么? 将点击绑定到 td 中的 div。这是一个游戏,网格是一张桌子。我不确定我在回答你的问题,你具体是什么意思? 您无法在动态创建的表中的div 元素上注册事件处理程序,是这样吗?如果是,请尝试在您将动态表附加到 DOM 的同一函数中注册您在问题中发布的点击处理程序,即只需将代码移至该 appendToDOM 函数 @Arkantos - 你能回答这个问题以便我标记它吗?谢谢。 【参考方案1】:

您实际上可以像这样将事件绑定移动到将这些元素添加到 DOM 的函数中

function appendToDOM()
   // creating a td element and appending to DOM
    var td = $('<td><div class="cell" id="cell-24-14"></div></td>');
    td.appendTo($table);

   /* now that the element is available in DOM, you can define you event handler here*/

    $('.cell').on('click', function (e)         
       alert($(this).attr('id'));
    );

这种方法的问题是您要为表中的每个 .cell 元素定义一个事件处理程序,使用委托可以做得更好。

$('urClosestStaticParent').on('click','.cell',function(e)
    alert($(this).attr('id'));
);

您可以在显示表格之前调用此代码,就像画龙点睛:)

当我说最接近的静态父级时,我指的是您正在创建的动态表的父级,可能是文档加载后的 div 容器。如果您没有任何此类元素,您可以尝试在您的 html 中添加一些空 div,将您的表格附加到该元素并使用它,如果没有,请改用 document

【讨论】:

以上是关于将单击绑定到 panzoom 容器中的元素的主要内容,如果未能解决你的问题,请参考以下文章

仅在单击元素后将单击处理程序绑定到正文

Jquery panzoom 点击

将元素滚动到可滚动容器中的视图中

jQuery中的事件与动画

是否可以将事件侦听器绑定到来自外部脚本的影子 dom 内的元素?

JQuery中的事件与动画