从元素的子元素中删除特定的事件处理程序

Remove specific event handler from child of element

本文关键字:元素 事件处理 程序 删除      更新时间:2023-09-26

在我的应用程序中,我想在用户单击panel-heading时调整窗口的大小,但是该标题包含一个子元素- button,该子元素- button绑定了另一个事件处理程序。我需要做的是,当用户点击那个按钮时,不会调用任何大小调整函数。我试了许多不同的方法,但没有一个奏效。

HTML:

<div class="panel-heading" style="cursor:pointer">
   <div class="pull-right">
       <button type="button" class="btn btn-danger btn-xs" id="btn-subject-remove"><span class="glyphicon glyphicon-remove"></span> Remove</button>
   </div>
</div>

我的jq是:

$('#btn-subject-remove').on('click',btnRemoveSubjectsClick);
$('#subscribers-row .panel-heading').on('click',btnResizeClick);

我试过了,但都没用:

 $('#subscribers-row .panel-heading').off('click','#btn-subject-remove',btnResizeClick);
 $('#btn-subject-remove').off('click',btnResizeClick);
 $('#subscribers-row .panel-heading').on('click',btnResizeClick).children().click(function(e){return false});

我也尝试检查在btnResizeClick函数什么元素被点击,如果它是删除按钮然后返回false,但点击的元素仍然是面板标题

有什么建议吗?

在子事件上绑定单击事件,并使用e.stopPropagation()阻止父事件。

在一个简单的例子中:

$(function() {
    $('div').on('click', function() {
        $(this).toggleClass('redBg');
    });
    $('div>*').on('click', function(e) {
        e.stopPropagation();
    });
});
div {
    background: green;
    width: 200px;
    height: 200px;
}
span {
    display: block;
    height: 50px;
    background: yellow;
}
.redBg {
    background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
    With some text
    <span> in a span </span>
</div>