首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在添加新块后崩溃/开销不起作用?

为什么在添加新块后崩溃/开销不起作用?
EN

Stack Overflow用户
提问于 2017-05-11 12:03:34
回答 4查看 61关注 0票数 0

为什么我的js代码不起作用?它以前工作过,但当我添加下一个块时,它不起作用了:

<div class="collapse" id="collapse-block">

我有崩溃块(id='collapse-block'),其中有3个其他崩溃块在里面。此js代码适用于按钮(id='expand-collapse'),它将在div (id='blocks')中展开/折叠块。

代码语言:javascript
复制
$(function() {
  $('#expand-collapse').on('click', function() {
    var allCollapsed = true;
    $('#blocks .collapse').each(function(i, block) {
      if ($(block).hasClass('show')) {
        allCollapsed = false;
      }
    });
    $('#blocks .collapse').each(function(i, block) {
      if (allCollapsed) {
        $(block).collapse('show');
      } else {
        $(block).collapse('hide');
      }
    });
  });
});
代码语言:javascript
复制
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">

<div class="card">
  <div class="card-header">
    <button class="btn btn-secondary" type="button" data-toggle="collapse" data-target="#collapse-block" aria-expanded="false" aria-controls="collapse-block">OPEN/CLOSE</button>

    <button id='expand-collapse' type="button">OPEN/CLOSE BLOCKS</button>
  </div>

  <div class="card-block">
    <div class="collapse" id="collapse-block">
      <div id="blocks">
        <div class="list-group">

          <div class="list-group-item">
            <a data-toggle="collapse" href="#block-1" aria-expanded="false" aria-controls="block-1">FIRST BLOCK</a>
            <div class="collapse block" id="block-1">
               FIRST BLOCK
            </div>
          </div>

          <div class="list-group-item">
            <a data-toggle="collapse" href="#block-2" aria-expanded="false" aria-controls="block-2">SECOND BLOCK</a>
            <div class="collapse block" id="block-2">
              SECOND BLOCK
            </div>
          </div>

          <div class="list-group-item">
            <a data-toggle="collapse" href="#block-3" aria-expanded="false" aria-controls="block-3">THIRD BLOCK</a>
            <div class="collapse block" id="block-3">
              THIRD BLOCK
            </div>
          </div>

        </div>
      </div>
    </div>
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>

EN

回答 4

Stack Overflow用户

发布于 2017-05-11 12:06:49

根据javascript标准,每当您修改DOM、添加或删除子元素时,该事件将被删除,您将不得不再次添加事件。这就是问题所在。我想是的。

编辑

修改innerHTML会导致重新解析内容和重新创建DOM节点,从而丢失您所附加的处理程序。如第一个示例所示,附加元素不会导致这种行为,因此不必重新解析,因为您正在显式地修改DOM树。

处理这个问题的另一个好方法是使用insertAdjacentHTML()。例如:

代码语言:javascript
复制
document.body.insertAdjacentHTML('beforeend', '<br>')
票数 1
EN

Stack Overflow用户

发布于 2017-05-11 12:25:22

您需要包含对引导脚本或Collapse.js的引用

代码语言:javascript
复制
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
票数 1
EN

Stack Overflow用户

发布于 2017-05-11 12:30:21

您没有在代码中添加引导css,我认为这就是问题所在

引用它就像

代码语言:javascript
复制
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/bootstrap/3/css/bootstrap.css" />

工作小提琴https://jsfiddle.net/qcdk68et/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43914888

复制
相关文章

相似问题

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