2

我在 div 中有一个可编辑的元素,它本身是可点击的。每当我单击 x-editable 锚元素时,单击会使 DOM 冒泡并触发对父 div 的单击。我怎样才能防止这种情况?我知道可以用 jQuery 来阻止这种情况,stopPropagation()但是我在哪里可以调用这个方法呢?

这是有问题的 JSFiddle:http: //jsfiddle.net/4RZvV/。要复制点击可编辑的值,您会看到包含的 div 将捕获点击事件。当我单击 x-editable 弹出窗口上的任意位置时也会发生这种情况,我也想防止这种情况发生。

在 lightswitch05 回答后编辑

我有多个应该可以选择的动态 DIV,所以我不能使用全局变量。我向.editable-click锚点添加了一个属性,而该属性却发生了变化。

editable-active用于知道弹出窗口是否打开

editable-activateable用于了解是否.editable-click应该像对待它一样对待该锚点

$(document).on('shown', "a.editable-click[editable-activateable]", function(e, reason) {
  return $(this).attr("editable-active", true);
});

$(document).on('hidden', "a.editable-click[editable-activateable]", function(e, reason) {
  return $(this).removeAttr("editable-active");
});

支票和你描述的差不多

$(document).on("click", ".version", function() {
  $this = $(this)

  // Check that the xeditable popup is not open
  if($this.find("a[editable-active]").length === 0) { // means that editable popup is not open so we can do the stuff
    // ... do stuff ...
  }
})
4

2 回答 2

3

对于链接上的点击,只需捕获点击事件并停止它:

$("a.editable-click").click(function(e){
    e.stopPropagation();
});

X-editable 中的点击有点棘手。一种方法是在 X-editable 窗口打开与否时保存一个标志,并且仅在 X-editable 关闭时才采取行动

var editableActive = false;

$("a.editable-click").on('shown', function(e, reason) {
    editableActive = true;
});

$("a.editable-click").on('hidden', function(e, reason) {
    editableActive = false;
});

$("div.version").click(function(e) {
  var $this;
  $this = $(this);
  if(editableActive === false){
      if ($this.hasClass("selected")) {
        $(this).removeClass("selected");
      } else {
        $(this).addClass("selected");
      }
  }
});

固定小提琴

于 2013-10-08T18:09:04.437 回答
1

它并不漂亮,但我们通过以下方式解决了这个问题:

$('.some-class').click(function(event) {
  if(event.target.tagName === "A" || event.target.tagName === "INPUT" || event.target.tagName === "BUTTON"){
    return;
  }

我们仍在寻找一种不需要特定标签名称列表的解决方案,这些标签名称可以点击。

于 2013-10-08T18:02:22.790 回答