javascript - jQuery stopPropagation 与 future 元素?

标签 javascript jquery

我有一个简单的表,其中有 2 个 tr。

enter image description here

每个 tr 上的最后一个 td 即将(将来)用 按钮 插入:

var futureButton=$("<input  type='button' value='click' class='btn'  />");

插入后:

$(".myTable tr td:nth-child(5)").append(futureButton)

看起来像这样:

enter image description here

这些按钮应该有 onClick 事件(它们没有内联 onclick),因此我将 onclick 附加到正文:

$("body").on('click',".btn",function (e){
  alert('button');
 
});

这是我的问题:

每个 TR 已经有:

<tr onclick='alert("row");'> // I can't change it....it's an existing code.

因此,当我按下按钮时,我会收到2个警报:“row”,然后“button”

但是我只想获得仅 1 个警报:“按钮”

但是我无法停止传播,因为当它到达“ body ”时为时已晚

也不 - 我无法更改 Tr 的“onclick”

我能做什么?

<强> JSBIN

编辑

澄清。 (抱歉,我应该强调这一点):

这些按钮(动画中的问号)是可以添加到任何 HTML 元素容器中的工具提示 - 所以在编译时 - 我不知道它会在哪里: (这就是为什么我将它们的 onclick 绑定(bind)到“body”)

你可以看到,当我按下问号时 - 整个“tr”认为我按下了它并显示数据(我想要它显示数据)。

enter image description here

所以我知道Js插件会在哪里插入这个按钮/问号...

最佳答案

我会事先热补丁现有的内联点击处理程序,如下所示:

$( ".myTable tr" ).each(function( _, tr ) {
  var inlineClick = tr.onclick;

  $( tr ).on('click', function( event ) {
    if( !$(event.target).hasClass( 'btn' ) ) {
      inlineClick.call( event.target );
    }
  });

  tr.onclick = null;
});

演示:http://jsbin.com/icoxak/26/edit


在这里,我们缓存当前的函数引用并添加我们自己的代码。在该代码中,我只是检查点击目标是否具有btn。当然,这个测试可以更精确。

但是,如果没有匹配项,我们将执行原始的点击处理程序,否则我们什么都不做。

如果有必要,我们也可以重复此代码(例如,插入新行),但我们必须确保我们自己的点击处理程序之前被清除,这样我们就不会创建多个实例。

关于javascript - jQuery stopPropagation 与 future 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17146086/

相关文章:

php - 为什么这个 Dojo 代码不与其 PHP 文件通信?

使用 Google Analytics 进行 Javascript 覆盖/对话跟踪

javascript - 使用切换时使第二个 div 位于第一个 div 旁边

javascript - 需要禁用部分的超链接背景

javascript - 将函数 “document.getElementById” 更改为 “document.getElementsByClassName” 并添加淡入/淡出 - JavaScript

jquery - 同步 jQuery 背景和元素动画

jquery - 如何使用下划线_.wrap方法修改jquery select2方法($.fn.select2)

jquery - 切换箭头图像更改

javascript - 如果我将一个元素存储在 JavaScript 变量中,当我调用该变量时它会再次检查它吗?

javascript - 延迟移除 View ,以便可以对其进行动画处理