根据子字符串选择 ID

我有一组HTML带有 ID 的图像"Hole#" ex: "Hole1", "Hole2" ... "HoleN".这些 IMG 标签正在加载本地存储的图像。我的目标是在单击其中一个图像时打印一个alert。


我发现了另一个我认为可以回答我的问题的 StackOverflow 问题。我已将其合并到下面的代码中。不幸的是,它没有达到预期的效果。


//Dynamically creates images

for (let i = 1; i <= NUM_HOLES; i++) {

    let HoleID = `"hole${i}"`;

    let HoleIDPic = `"holePic${i}"`;

    holesString +=

    `<div id=`+ HoleID + `>

    <img id=` + HoleIDPic + ` src="" />

    </div>`

}


window.onload = function() {

      document.getElementById("img[id|=hole]").onclick = function()

      {

         alert("Clicked");

      };

   };

HTML:


   <section id="holes">


   </section>

"img[id|=hole]"但是用替换代码"hole1"确实有效(对于hole1),所以我已经结束了我的语法ID选择。


青春有我
浏览 151回答 2
2回答

狐的传说

id在所有图像上使用相似 s 的整个想法是错误的方法。请改用通用的 CSS 类。然后,要找出单击了哪个图像,请使用单个委托侦听器并使用自动传递给单击处理程序的事件对象。我正在向您展示一个带有按钮而不是图像的示例:const buttonDiv = document.querySelector('.buttons');// lets add some buttonsfor (let i = 0; i < 5; i++) {&nbsp; let button = document.createElement('button');&nbsp; button.type = 'button';&nbsp; button.className = 'button';&nbsp; button.textContent = 'Button Number ' + i;&nbsp; buttonDiv.appendChild(button);}// now let's add a delegate click listener on the div containing the buttonsbuttonDiv.addEventListener('click', function(event) {&nbsp; // in any event listener, the event object has a `target` property, telling you which element the event was raised on&nbsp; // this allows us to only react in the click listener if the clicked element meets certain conditions&nbsp; if (event.target.matches('button.button'))&nbsp;&nbsp; &nbsp; console.log('you clicked on ' + event.target.textContent);}).buttons {&nbsp; background-color: #f0f0f0;&nbsp; padding: 10px;}<div class="buttons"></div>

蝴蝶刀刀

尝试这个&nbsp; &nbsp;&nbsp;<!DOCTYPE html><html><head>&nbsp; &nbsp; <meta charset="UTF-8">&nbsp; &nbsp; <meta name="viewport" content="width=device-width, initial-scale=1.0">&nbsp; &nbsp; <title>Document</title></head><body>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <section id="holes"></section>&nbsp; &nbsp; <script>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; loadImages(2);&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; function loadImages(NUM_HOLES){&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; const sectionHoles = document.getElementById('holes');&nbsp; &nbsp; &nbsp; &nbsp; //Dynamically creates images&nbsp; &nbsp; &nbsp; &nbsp; for (let i = 1; i <= NUM_HOLES; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let HoleID = `hole${i}`;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let HoleIDPic = `holePic${i}`;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let div = document.createElement('div');&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let img = document.createElement('img');&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; div.id = HoleID;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img.id = HoleIDPic;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img.src = "someimage.png";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // put image element in div&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; div.appendChild(img);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // put div in section&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sectionHoles.appendChild(div);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // adding event listener to the img element&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.getElementById(HoleIDPic).addEventListener('click', function(){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert(HoleIDPic + 'clicked');&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;}&nbsp; &nbsp; </script></body></html>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript