You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

父div与子div点击事件同时触发,如何阻止父元素事件执行?

问题

点击带有data-link的父div(class为prgOzet)内的子div(class为yeniekle,绑定了YeniProgramModal点击事件)时,会同时触发父子元素的事件,父div的事件也会被触发。尝试通过设置tooltipster样式阻止无效,求解决方法。

相关代码:

HTML代码

<div class="@renkClass prgOzet" data-link="@Url.Action("ProgramOzetTooltip", "Program", new { ID = item.ID, area = "yonetim", TurID = item.TurID,Tarih=item.Tarih.Value.ToString("dd.MM.yyyy HH:mm") })">
   @if (Fonksiyonlar.YetkiKontrol("Program Ekle##") && isPrgGosterim && !Model.Filtre.isDisardan && (!isKisitli ||
   (isKisitli &&((GunSinir == (int)Sabitler.ProgramGunSinir.SadeceGecmis && Trh.Date >= BugunBas) ||
   (GunSinir == (int)Sabitler.ProgramGunSinir.SadeceGelecek && Trh.Date <= BugunSon) ||
   (GunSinir >= 0 && (Trh.Date >= SinirBasTarih && Trh.Date < SinirBitTarih))))))
   {
    <div class="yeniekle hidden-print" onclick="YeniProgramModal(0,'@string.Format("{0:00}", Trh.Hour):00','@(Trh.ToString("dd-MM-yyyy"))');"><span><i class="fa fa-plus"></i> yeni ekle</span></div>
   }

JavaScript代码

function YeniProgramModal(ID, sa, tarih, TurID) {
    $('.tooltipster-base').css('pointer-events', 'none');
    $('#HizliKayitEkle iframe').attr("src", "/yonetim/program/HizliKayit?ID=" + ID + "&sa=" + sa + "&GelisTarihi=" + tarih + "&TurID=" + TurID);
    $('#HizliKayitEkle iframe').attr("height", $(window).height());
    $('#HizliKayitEkle').modal();
    $('.tooltipster-base').css('opacity', '0');
}
解决方案

这是事件冒泡导致的问题:点击子元素时,事件会沿着DOM树向上传播,触发父元素的绑定事件。以下是几种解决方法:

方法1:直接在onclick中阻止冒泡

修改子div的onclick属性,添加事件阻止逻辑:

<div class="yeniekle hidden-print" onclick="YeniProgramModal(0,'@string.Format("{0:00}", Trh.Hour):00','@(Trh.ToString("dd-MM-yyyy"))'); event.stopPropagation();">
    <span><i class="fa fa-plus"></i> yeni ekle</span>
</div>
`event.stopPropagation()`会终止事件向上传播,父元素的事件就不会被触发。

### 方法2:在函数内部阻止冒泡
如果不想修改HTML,可以在`YeniProgramModal`函数内添加阻止逻辑:
```javascript
function YeniProgramModal(ID, sa, tarih, TurID) {
    // 兼容不同浏览器的事件阻止冒泡
    if (window.event) {
        window.event.cancelBubble = true;
    } else {
        arguments.callee.caller.arguments[0].stopPropagation();
    }

    $('.tooltipster-base').css('pointer-events', 'none');
    $('#HizliKayitEkle iframe').attr("src", "/yonetim/program/HizliKayit?ID=" + ID + "&sa=" + sa + "&GelisTarihi=" + tarih + "&TurID=" + TurID);
    $('#HizliKayitEkle iframe').attr("height", $(window).height());
    $('#HizliKayitEkle').modal();
    $('.tooltipster-base').css('opacity', '0');
}

方法3:用jQuery绑定事件(推荐)

如果项目使用jQuery,建议移除内联onclick,改用事件绑定,更易维护:

// 绑定子元素点击事件
$(document).on('click', '.yeniekle', function(e) {
    e.stopPropagation(); // 阻止冒泡
    // 从元素属性获取参数
    let sa = $(this).data('sa');
    let tarih = $(this).data('tarih');
    YeniProgramModal(0, sa, tarih);
});

对应的HTML修改为:

<div class="yeniekle hidden-print" data-sa="@string.Format("{0:00}", Trh.Hour):00" data-tarih="@(Trh.ToString("dd-MM-yyyy"))">
    <span><i class="fa fa-plus"></i> yeni ekle</span>
</div>

内容的提问来源于stack exchange,提问作者Büşra Güler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:06:00