【问题标题】:Capturing some clicks, not all捕获一些点击,而不是全部
【发布时间】:2012-11-14 09:59:12
【问题描述】:

我已经构建了一个模态框,它使用一个覆盖所有的 div 背景来淡出内容并允许用户单击该框以关闭它。我通过捕获所有点击来做到这一点,但过滤掉模型框上的任何点击。

  $('body').on('click', '.cover_slide > *',function(e){
    e.stopPropagation();
  });
  $('body').on('click', '.cover_slide',function(){
    helper.cover.close();
    $('body').off('click', '.cover_slide');
  });

我希望能够通过点击与我的模态框上的某些元素进行交互,但我似乎无法弄清楚如何做到这一点并且仍然具有我的“点击关闭”功能。目前该框的所有点击都会被忽略。

【问题讨论】:

  • 淡出背景和弹出正文本身的 HTML 是什么?
  • 你不能只检测到点击“覆盖所有”div背景来关闭它吗?
  • 不,因为覆盖所有背景 div 位于封面下方,因此点击事件不会从封面幻灯片中包含的任何内容传播。

标签: javascript jquery delegates jquery-events


【解决方案1】:

无需多次绑定点击。尝试使用这个 sn-p。请注意,您可能必须根据元素的实际情况更改最近的选择器

$(document).bind("click", function(e) {
    if($(e.target).closest("div").hasClass('coverSlide')) {
        //do stuff if someone clicks the box
    }
});

【讨论】:

  • 我很困惑。这是否允许在从 coverSlides 子元素单击 coverSlide 时关闭?
  • 是的,这行 $(e.target).closest("div").hasClass('coverSlide') 检测是否是被点击的 coverSlide 元素(或其子元素)。
  • 然而,它们似乎并没有区别。
  • 这是一个 sn-p,不是一个完整的解决方案。这是为了向您展示无需进行多次点击绑定。您应该根据需要调整条件。
  • 我明白这一点。我的意思是,我正在努力了解这将如何支持我的中心要求,即查找背景 div 上的点击,而不是其子级。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 2011-02-08
  • 2014-10-18
  • 1970-01-01
相关资源
最近更新 更多