首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery + stopPropagation:从父选择器中排除子元素

jQuery + stopPropagation:从父选择器中排除子元素
EN

Stack Overflow用户
提问于 2012-01-23 19:18:09
回答 2查看 6.5K关注 0票数 1

基于可接受答案的最终工作代码

代码语言:javascript
复制
        $('#photo-upload, #photo-upload .close').click(function(){
            $('#photo-upload').removeClass('show');
        });

        $('#upload-button').click(function(){
            $('#photo-upload').addClass('show');
        });

        $('#form-window').click(function(e){
              e.stopPropagation();
        });

原始问题

我有一个带关闭按钮的模态窗口。窗口由链接a#upload-button触发。#photo-upload是一个100%的高度+宽度固定的div。#form-window是一个200 box×200 box框,它在#photo-upload内水平和垂直地居中。

代码语言:javascript
复制
<div id="photo-upload">
    <div id="form-window">
        <!-- Content -->
        <a class="close"></a>
    </div>
</div>

关闭按钮绝对定位在右上角以外的一点位置。我想设置一个单击函数,以便在模式窗口外单击关闭窗口,并使单击“关闭”按钮关闭窗口。但是,点击窗口本身不会关闭窗口。

我目前的代码是:

代码语言:javascript
复制
$('#photo-upload').click(function(e){
    if(!$(e.target).is('#form-window')){
      return false;
    } else {
        $(this).removeClass('show');
    }
});

$('#form-window').live("click",function(e){
    if(!$(e.target).is('a.close')){
      e.stopPropagation();
    }
});


$('#upload-button').live("click", function(){
    $('#photo-upload').addClass('show');
});

$('#photo-upload .close').live("click", function(){
    $('#photo-upload').removeClass('show');
});

使用上面的代码,当我单击其中任何一个元素并且无法关闭div时,都不会发生任何事情。我做错了什么?

如何在父元素上使用stopPropagation(),但排除子元素(在我的例子中是a.close)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-23 19:23:24

只需向“关闭”按钮添加一个额外的处理程序,该按钮也会关闭窗口。

代码语言:javascript
复制
$(".close").live('click',function(){
            $('#form-window').removeClass('show');
        });

理想情况下,您可能希望在.close之外实际添加document选择器,并且只使用该函数一次,以避免代码重复。

票数 2
EN

Stack Overflow用户

发布于 2012-01-23 19:24:33

检查target是否不是form-window click处理程序中的关闭链接。它不停止event propagation,否则让文档click处理程序处理rest。尝尝这个

代码语言:javascript
复制
    $(document).live('click',function(){
        $('#form-window').removeClass('show');
    });

    $('#form-window').live("click",function(e){
        if(!$(e.target).is('a.close')){
          e.stopPropagation();
        }
    });
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8977310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档