如何动态获取ID并更改内容?

3

在点击按钮时,我试图更改从后端动态生成的内容。 我正在选择一个被逐个动态生成的按钮var testOne = document.getElementById("promo_popup_cta_0"); 。 只有最后的数字从0变化。 一旦我点击promo_popup_cta_0 ,它应该更改HTML中的内容,并将相同的数字添加到此ID promo_popup_wrapper_NUMBER中。

var modalOne = document.getElementById("promo_popup_wrapper_0");
var modalTwo = document.getElementById("promo_popup_wrapper_1");
var trigger = document.querySelector(".popupLink");
var testOne = document.getElementById("promo_popup_cta_0");
var testTwo = document.getElementById("promo_popup_cta_1");
var closeButton = document.querySelector(".close-button");

function toggleModal() {
    modalOne.classList.toggle("show-modal-promo");
}

function windowOnClick(event) {
    if (event.target === modalOne) {
        toggleModal();
    }
}

function toggleModalTwo() {
    modalOne.classList.toggle("show-modal-promo");
}

function windowOnClick(event) {
    if (event.target === modalTwo) {
        toggleModal();
    }
}

testOne.addEventListener("click", toggleModal);
testTwo.addEventListener("click", toggleModalTwo);

closeButton.addEventListener("click", toggleModal);
window.addEventListener("click", windowOnClick);
 
})
.modal-promo {
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  opacity: 0;
  visibility: hidden;
  transform: scale(1.1);
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
}
.modal-promo .modal-content-promo {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background-color: white;
  padding: 1rem 1.5rem;
  width: 24rem;
  border-radius: 0.5rem;
}
.modal-promo .modal-content-promo .close-button {
  float: right;
  width: 1.5rem;
  line-height: 1.5rem;
  text-align: center;
  cursor: pointer;
  border-radius: 0.25rem;
  background-color: lightgray;
}
.modal-promo .modal-content-promo .close-button:hover {
  background-color: darkgray;
}
.show-modal-promo {
  opacity: 1;
  visibility: visible;
  transform: scale(1);
  transition: visibility 0s linear 0s, opacity 0.25s 0s, transform 0.25s;
}
<div class="modal-promo" id="promo_popup_wrapper_<?php print $key;?>">
  <div class="modal-content-promo">
    <span class="close-button">×</span>
    <p>
      <?php
                      if (!empty($promo_banner_fields['promo_popup_text'])):
                        print  $promo_banner_fields['promo_popup_text'];
                      endif;
                      ?>
    </p>
  </div>
</div>

<u class="popupLink" id="promo_popup_cta_0">One</u>
<u class="popupLink" id="promo_popup_cta_1">Two</u>

请告诉我如何开始处理这个问题。

OP需要为PHP代码输入一个硬值,以使示例代码正常工作,因为PHP无法与Stackoverflow的设置相匹配。 - slevy1
1个回答

0

试试这个:

  

  var modal = document.querySelector(".modal-promo");
  var trigger = document.querySelector(".popupLink");
  var testOne = document.getElementById("promo_popup_cta_0");
  var testTwo = document.getElementById("promo_popup_cta_1");
  var closeButton = document.querySelector(".close-button");

  function toggleModal(id = null) {
    modal.classList.toggle("show-modal-promo");
    if (id !==null) {
      modal.setAttribute('id', 'promo_popup_wrapper_'+id);
    }
    
  }

  function windowOnClick(event) {
    if (event.target === modal) {
      toggleModal();
      console.log(event);
    }
  }

  testOne.addEventListener("click", function(event){ toggleModal(event.srcElement.attributes["data-id"].nodeValue); });
  testTwo.addEventListener("click", function(event){ toggleModal(event.srcElement.attributes["data-id"].nodeValue); });
  closeButton.addEventListener("click", function(){ toggleModal(); });
.modal-promo {
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  opacity: 0;
  visibility: hidden;
  transform: scale(1.1);
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
}
.modal-promo .modal-content-promo {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background-color: white;
  padding: 1rem 1.5rem;
  width: 24rem;
  border-radius: 0.5rem;
}
.modal-promo .modal-content-promo .close-button {
  float: right;
  width: 1.5rem;
  line-height: 1.5rem;
  text-align: center;
  cursor: pointer;
  border-radius: 0.25rem;
  background-color: lightgray;
}
.modal-promo .modal-content-promo .close-button:hover {
  background-color: darkgray;
}
.show-modal-promo {
  opacity: 1;
  visibility: visible;
  transform: scale(1);
  transition: visibility 0s linear 0s, opacity 0.25s 0s, transform 0.25s;
}
<?php 
  $key = -1; 
  $promo_banner_fields['promo_popup_text'] = "Some text";
?>
<div class="modal-promo" id="promo_popup_wrapper_<?= $key;?>">
  <div class="modal-content-promo">
    <span class="close-button">×</span>
    <p>
      <?php
        if (!empty($promo_banner_fields['promo_popup_text'])):
          print  $promo_banner_fields['promo_popup_text'];
        endif;
      ?>
    </p>
  </div>
</div>

<u class="popupLink" id="promo_popup_cta_0" data-id="0">One</u>
<u class="popupLink" id="promo_popup_cta_1" data-id="1">Two</u>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接