如何防止点击链接时打开 Bootstrap 模式

问题描述 投票:0回答:1

我有一个表,单击该行上的任意位置将打开一个模式对话框(以编辑该行),但有些列包含链接。单击这些链接时,我不想转到该链接而不打开模式。

<body>
<div class="container-fluid">
    <table class="table table-sm table-striped table-bordered table-hover">
        <thead>
        <tr>
            <th>#</th><th>Link</th><th>Date</th>
        </tr>
        </thead>
        <tbody>
        <tr style="cursor:pointer;" role="button" data-bs-toggle="modal" data-bs-target="#myModal">
            <td>1</td><td><a href="https://google.com" target="_blank">go to google</a></td><td>2024-05-18</td>
        </tr>
        </tbody>
    </table>
</div>
<div class="modal fade" id="myModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content border">
            <div class="modal-header px-card bg-light border-bottom-0 p-1">
                <h5 class="modal-title">Modal</h5>
                <button class="btn-close me-n1" type="button" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body p-card">
                <p>Here's some stuff</p>
            </div>
            <div class="card-footer d-flex justify-content-end align-items-center bg-light">
                <button class="btn btn-primary px-4" type="button" data-bs-dismiss="modal">Save</button>
            </div>
        </div>
    </div>
</div>
</body>

我尝试在 href 的 onclick 中停止传播,但它在调用 show.bs.modal 后被调用,所以对我没有帮助。我可以为 show.bs.modal 添加一个事件侦听器,并希望获得单击的 href 元素,以便我可以确定是否应该忽略它,但 relatedTarget 是行,所以这对我没有帮助.

我的做法是错的吗?我怎样才能达到我想要的结果?

javascript twitter-bootstrap bootstrap-modal
1个回答
0
投票

您可以使用 JavaScript 创建模式,而不是使用

data-bs-toggle="modal"
data-bs-target="#myModal"
属性。

  1. 删除这些属性。
  2. tr
    添加一些标识符,而不是可用于添加事件侦听器。它可能是另一个
    data-
    属性,甚至是特定的类名。让我们决定添加
    data-modal-toggle="myModal"
  3. 使用 JavaScript 代码创建模式并添加事件侦听器以在单击时显示它。
// create modal instance
const myModal = new bootstrap.Modal(document.getElementById('myModal'));

// select modal-trigger element by using the proper selector 
const modalTriggerEl = document.querySelector('[data-modal-toggle="myModal"]');

// add event listener
modalTriggerEl.addEventListener('click', (e) => {
// if it isn't 'a' element, then open the modal
  if (e.target.tagName.toLowerCase() !== 'a') {
    myModal.show();
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.