eventListener не работает, когда appendChild для определенного div - PullRequest
0 голосов
/ 06 марта 2019

Редактировать: Ответ на вопрос.Мои кнопки были частью формы и имели submit по умолчанию type.Изменение на type="button" решило проблему.

Я использую button для добавления нового div (sectionHeader), который содержит динамически созданный button с использованием createElement(), а затем добавляю его к уже существующему div (sectionBio).

Затем я добавляю eventListener к одному из button.

Когда я добавляю sectionHeader к sectionBio, используя appendChild(), после нажатия кнопки button кнопки и раздел исчезают.В моем локальном проекте eventListener на button, который регистрирует «test» для консоли, даже не работает, хотя он работает и на codepen.

Когда я добавляю sectionHeader к телу через document.body.appendChild(), все работает как положено.

Есть идеи, что не так?

let btnAjouterSection = document.querySelector('.btn-nouvelle-section');
let sectionBio = document.querySelector('.section-bio');

btnAjouterSection.addEventListener('click', () => {
  let sectionHeader = document.createElement('div');
  let headerTitle = document.createElement('h3');
  let btnSupprimer = document.createElement('button');
  let textArea = document.createElement('textarea');
  textArea.className = 'textarea-bio';
  textArea.readOnly = true;
  sectionHeader.className = 'section-header';
  btnSupprimer.className = 'btn btn-supprimer';
  headerTitle.className = 'titre';
  btnSupprimer.textContent = 'Supprimer';
  headerTitle.textContent = 'Nouvelle Section';
  sectionHeader.appendChild(headerTitle);
  sectionHeader.appendChild(btnSupprimer);
  //document.body.appendChild(sectionHeader);
  sectionBio.appendChild(sectionHeader);
  sectionBio.appendChild(textArea);
  btnSupprimer.addEventListener('click', () => {
    console.log('test');
  })
})
$color-blue-primary: #09f;
$color-blue-dark: #0075c3;
$color-dark-gray: #4f4f4f;
$color-light-gray: #eee;
$color-white: #fff;
.container {
  display: flex;
  flex-direction: column;
  width: 80%;
  .profil-header {
    width: 100%;
    display: flex;
    justify-content: flex-start;
    align-items: center;
    padding: 0 40px;
    position: relative;
    .img-container {
      display: flex;
      flex-direction: column;
      align-items: center;
      .ajouter-photo-lien {
        text-decoration: none;
        color: $color-blue-dark;
      }
    }
    .bio-container {
      margin-left: 50px;
      .input {
        border: none;
        color: #3d3d3d;
        background: $color-light-gray;
        display: block;
        font-family: 'Source Sans Pro', sans-serif;
      }
      .input--active {
        border: 1px solid #333;
        background: #fff;
        padding: 0px 5px;
      }
      .nom {
        font-size: 2rem;
        font-weight: 600;
        margin-bottom: 20px;
      }
      .titre {
        margin-bottom: 15px;
        color: #3d3d3d;
        font-size: 1.4rem;
        font-weight: 700;
      }
      .formation {
        font-weight: 300;
        font-size: 1rem;
        color: #3d3d3d;
      }
      .medias-sociaux-container {
        margin-top: 10px;
        display: flex;
        align-items: center;
        .link {
          color: #3d3d3d;
          margin-right: 5px;
          font-size: 1.4rem;
          transition: all .2s;
          &--twitter:hover {
            color: #38A1F3;
          }
          &--linkedin:hover {
            color: #0077B5;
          }
          &--google {
            background: #3d3d3d;
            margin-top: -1px;
            border-radius: 3px;
            font-size: .8rem;
            padding: 3px 4px;
            color: $color-light-gray;
          }
          &--google:hover {
            background: #DB4437;
          }
          &--github:hover {
            color: #6cc644;
            ;
          }
          &--personal-page {
            background: #3d3d3d;
            margin-top: -1px;
            border-radius: 3px;
            font-size: .8rem;
            padding: 3px 3px;
            color: $color-light-gray;
          }
          &--personal-page:hover {
            background: $color-blue-primary;
          }
          &--email:hover {
            color: $color-blue-primary;
          }
        }
      }
    }
  }
  .section-bio {
    width: 90%;
    margin-top: 30px;
    margin-right: auto;
    margin-left: auto;
    padding: 0px 30px 40px 30px;
    background: #fff;
    display: flex;
    flex-direction: column;
    .section-header {
      display: flex;
      width: 100%;
      justify-content: space-between;
      align-items: center;
      &--nouvelle-section {
        justify-content: flex-end;
      }
    }
    .ajout-ver-ang {
      margin-top: 20px;
      display: flex;
      width: 100%;
      justify-content: flex-start;
      align-items: center;
    }
    ul {
      margin-left: 30px;
    }
    h3 {
      margin-top: 50px;
      display: inline-block;
      clear: both;
    }
    .checkbox {
      margin-right: 10px;
    }
    .label {
      font-family: 'Source Sans Pro', sans-serif;
    }
  }
}

.btn {
  background: $color-blue-dark;
  color: #fff;
  border: none;
  padding: 5px 20px;
  border-radius: 5px;
  margin-left: 20px;
  margin-top: 1.5rem;
  font-weight: 300;
  font-size: 1rem;
  cursor: pointer;
  transition: all .2s;
  &-modifier {
    &--profil {
      position: absolute;
      right: 40px;
      top: 10px;
    }
  }
  &-supprimer {
    background: red;
  }
  &:hover {
    background: $color-blue-primary;
  }
}

.textarea-bio {
  border: none;
  font-family: 'Source Sans Pro', sans-serif;
  font-weight: 300;
  font-size: 1.3rem;
  line-height: 1.7rem;
  width: 100%;
  height: auto;
  resize: none;
}

.textarea--active {
  border: 1px solid #333;
  padding: 10px;
  display: block;
  width: 100%;
  background: #fff;
  color: #000;
}
<section class="container">
  <form action="" class="form">
    <div class="section-bio">
      <div class="section-header section-header--nouvelle-section">
        <button type="button" class="btn btn-nouvelle-section">Add</button>
      </div>
    </div>
  </form>
</section>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...