【问题标题】:handle jquery event bubbling on table cell hover处理表格单元格悬停时冒泡的jQuery事件
【发布时间】:2012-06-14 18:42:37
【问题描述】:

我刚刚开始使用 jQuery 进行事件冒泡,所以我的理解非常有限。我需要处理在父容器级别的 html 表(网格)行/单元格上发生的所有事件。例子: 1.当用户点击一行时,我不想将点击事件绑定到每个我将它绑定到父级。 2.当用户将鼠标悬停在单元格上时,我想显示工具提示,即需要将标题属性设置为单元格的文本元素。我也需要冒泡这个活​​动。

我能够解决我的要求的第一部分。这是第 1 部分的代码(下面添加了 jsFiddle):

$('#grid').click(function(evt) {
    var row = $(evt.target).parent('tr'); // Get the parent row
    var cell= $(evt.target); //Get the cell
    alert('Row data: ' + row.text());
    alert('Cell data: ' + cell.text());
});

我认为实现悬停也很简单。但我无法捕获单个单元格的值。这是我在小提琴jsFiddle: sample code to bubble the event on cell hover中的示例代码

另外,我注意到我在悬停时看到了两次警报。我猜它是为单元格引发事件一次,然后为行/表引发事件。不确定?

【问题讨论】:

  • 无法完全回答您的问题,但您想要mouseover 而不是hover
  • @sachleen,将其更改为 mouseover 确实会显示单元格值,但首先它会显示整个表格内容,然后会显示单元格值。我可以限制它只返回单元格值吗?
  • 那是因为它也悬停在桌子上。你想做 joshatjben 建议的事情,但这里有一个工作版本:jsfiddle.net/3xp7Q/3

标签: jquery events event-bubbling


【解决方案1】:

您可以$.on 来实现这一点,如下所示。从 jQuery 1.7 开始,所有对.live().bind()、'.delegate()' 的调用都在后台使用.on()。而.on 仅在#grid 上绑定事件并拦截该元素上的事件,然后检查目标是否匹配第二个选择器。如果是,则执行该函数。

$('#grid').on('mouseenter','td', function(){
       console.log($(this).text());
   });​

Working Fiddle

【讨论】:

  • 哇,我从来没有注意到Firebug Lite 复选框。太方便了!不必弄乱 Chrome 开发工具窗口的位置,以免碍事。
  • @sachleen,是的,它非常方便。但仅当您选择 jQuery (edge) 作为库/框架时才可用。
  • 同样的问题,这个实现与我发布的有什么不同?我的意思是,带有委托的点击事件与我在原始帖子中的事件冒泡代码有何不同?我也喜欢 jQuery edge - 感谢您向我们展示 :)
  • 啊,这就是为什么!不要在这里启动一个不相关的线程,但是有没有办法在新的 jsfiddles 中选择这些作为默认选项?
  • @sachleen,你在劫持线程:) 但没关系。我也在学习这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多