1

我有一个与 tr 和 td 的点击事件绑定的表。我还有一个文档点击事件。我的页面中有一个过滤器设置,所以如果选择了一个特定的过滤器,我需要防止点击 tr 和 td 并且只触发文档点击事件。我无法控制元素点击。我只能控制文档点击(换句话说,我无法更改元素点击中的实现代码,但我可以绑定或处理)

$(document).ready(function(){

  $("tr").click(function(evt){
    $("#changehtml").html("Changed");
  });

  $("td").click(function(evt){
    var test ="do some operation";

  });

  $(document).click(function(evt){
    evt.stopPropagation();
    evt.preventDefault();
  });
});

有什么办法可以防止元素在文档范围内的点击事件?

4

2 回答 2

0

您可以在捕获阶段而不是冒泡处理事件。我看不出 jQuery 是如何做到这一点的,所以使用本机 API:

document.getElementById('[some outer element id]').addEventListener(
    'click',
    function(e) {e.stopPropagation();},
    true
);

第三个参数 = true 使其在捕获阶段被触发。

于 2013-04-30T07:14:45.827 回答
0

如果您知道过滤器,则只需在点击事件中检查它。如果你在点击事件中返回 false,它不会做任何事情。所以,试试这个:

$('element').on('click', function () {
  if (myfilter...) {
    return false;
  }

  // do some action    
});
于 2013-04-30T06:58:17.020 回答