javascript - 嵌套数据切换元素

标签 javascript jquery html bootstrap-4

我有一种在循环中生成的表格显示。

<div class="container agenda" id="test_container">


<div class="agenda-item row v-center border-top border-5 py-2" data-toggle="modal" data-target="#test_1">
    <div class="col-12 col-md-2 font-weight-bold timeslot"><i class="far fa-clock location-icon"></i>09.45-10.15</div>
    <div class="col-12 col-md-3 text-primary">
        <p><strong>First title</strong></p>
    </div>
    <div class="col-12 col-md-6">
        <p class=""><b>Some Text 1</b></p>Some other text 1
    </div>
    <div class="col-12 col-md-1 toggle-collapse"><span class="fas fa-2x fa-plus-circle" data-target="#test_1_collapsible" role="button" aria-expanded="false" aria-controls="test_1_collapsible"></span></div>
</div>

<div id="test_1_collapsible" class="row collapse">
    <div class="col-10 offset-2">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </div>
</div>


<div class="agenda-item row v-center border-top border-5 py-2" data-toggle="modal" data-target="#test_2">
    <div class="col-12 col-md-2 font-weight-bold timeslot"><i class="far fa-clock location-icon"></i>10.30-11.00</div>
    <div class="col-12 col-md-3 text-primary">
        <p><strong>Second title</strong></p>
    </div>
    <div class="col-12 col-md-6">
        <p class=""><b>Some text 2</b></p>Some other text 2
    </div>
    <div class="col-12 col-md-1 toggle-collapse"><span class="fas fa-2x fa-plus-circle" data-target="#test_2_collapsible" role="button" aria-expanded="false" aria-controls="test_2_collapsible"></span></div>
</div>

<div id="test_2_collapsible" class="row collapse">
    <div class="col-10 offset-2">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>
</div>


<div class="agenda-item row v-center border-top border-5 py-2" data-toggle="modal" data-target="#test_3">
    <div class="col-12 col-md-2 font-weight-bold timeslot"><i class="far fa-clock location-icon"></i>11.15-11.45</div>
    <div class="col-12 col-md-3 text-primary">
        <p><strong>Some title 3</strong></p>
    </div>
    <div class="col-12 col-md-6">
        <p class=""><b>Some text 3</b></p>Some other text 3
    </div>
    <div class="col-12 col-md-1 toggle-collapse"><span class="fas fa-2x fa-plus-circle" data-target="#test_3_collapsible" role="button" aria-expanded="false" aria-controls="test_3_collapsible"></span></div>
</div>

<div id="test_3_collapsible" class="row collapse">
    <div class="col-10 offset-2">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>
</div>

</div>

我想做的是每当我按行 div 上的任意位置时弹出模式,除了按加号图标时。然后我想用信息来扩展/折叠额外的分区。我知道加号图标属于模式触发器。

尝试使用 event.stopPropagation(); 但没有任何结果。

当然,我可以在每个同级 div 上添加 data-toggle 而不是父级,但这会产生死区这不会触发模式(我宁愿避免的事情)。

关于如何实现这一目标有什么想法吗?

编辑:

有人索要脚本:

$(document).ready(function(){

$('.agenda .row').on('click', '.toggle-collapse', function(e){

  var collapse_element = $(e.target.getAttribute('data-target'));

  e.stopPropagation();

  collapse_element.siblings('.collapse').collapse('hide');
  collapse_element.collapse('toggle');

});

通过 collapse_element.siblings('.collapse').collapse('hide'); 实现类似 Accordion 的行为。

最佳答案

您可以使用事件委托(delegate)而不是内联数据属性来显示模式,传入选择器以排除行的加号子项,这使用JQuery 的 .on() 具有事件委托(delegate),您需要在 DOM Ready 上添加此脚本,或者如果表是正如您所说,通过脚本生成,在表完全形成后运行它,或者您可以修改它以在表本身上使用委托(delegate):

$(".row").on('click', ':not(.fa-plus-circle)', function (e) {
     //e.stopPropagation(); Not necessary if you remove the data-toggle="modal" data-target="#example_modal" from your .row element
     // Show dialog
     $('#example_modal').modal('show');
});

关于javascript - 嵌套数据切换元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59827903/

相关文章:

jquery - 通过通用鼠标悬停事件添加类

javascript - 通过单击链接切换图像并禁用事件链接

javascript - ionic 2 : Style ion-select with validation

javascript - 通过按 TD 对象类过滤设置只读列

javascript - 从数据库调用动态填充选择标签选项

javascript - 如何根据文本框的输入在div中生成一系列图像

jquery - 如何附加复选框值以在ajax中发送数据?

javascript - 通过网页动态处理请求

javascript - 在另一个对象内创建动态对象

javascript - 如何从 webpack 5 中的编译中获取按入口点过滤的文件依赖项的平面列表