当前位置: 首页 > 面试题库 >

使用addEventListener和getElementsByClassName传递元素ID

龚志
2023-03-14
问题内容

我正在定义JSON文件中的项目列表,并将该列表显示在网页上。目的是让用户单击该列表中的任何项目以显示有关该项目的更多信息(保存在同一JSON文件中的信息)。

该列表的所有项目都是同一类的成员,并且每个项目都有一个从JSON文件定义的唯一ID。HTML看起来像这样:

<ul>
   <li class="menu" id="bob">Robert Smith</li>
   <li class="menu" id="jane">Jane Doe</li>
   <li class="menu" id="sue">Susan Carter</li>
</ul>

我打算使用一些类似的方法

var userSelection = document.getElementsByClassName('menu');

userSelection.addEventListener('click', myFunctionToPrintDetails());

但我不确定如何将ID从事件侦听器传递到打印功能,以确定要打印的详细信息。

我在HTML / CSS方面有丰富的经验,但在JSON /
AJAX方面却很少,因此我可能会尝试完全低音处理。如果有更合适的方法可以做到这一点,我欢迎您提供反馈。

我尝试了两个答案,但均无济于事。当我将userSelection.length登录到控制台时,我得到0; 当我登录userSelection时,我得到:

HTMLCollection(0)
> sue: li#sue.menu
length: 3
> jane: li#jane.menu
> bob: li#bob.menu
> 0: li#bob.menu
> 1: li#jane.menu
> 2: li#sue.menu

问题答案:

Codepen演示

var userSelection = document.getElementsByClassName('menu');

for(var i = 0; i < userSelection.length; i++) {
  (function(index) {
    userSelection[index].addEventListener("click", function() {
       console.log("Clicked index: " + index);
     })
  })(i);
}

如@torazaburo在评论中指出的,如果要支持的浏览器符合最新版本的JavaScript ECMAScript 6(ES6),则可以使用以下代码。

var userSelection = document.getElementsByClassName('menu');

for(let i = 0; i < userSelection.length; i++) {
  userSelection[i].addEventListener("click", function() {
    console.log("Clicked index: " + i);
  })
}


 类似资料:
  • 问题内容: 我试图使用for循环将事件侦听器添加到多个对象,但最终所有侦听器都针对同一对象->最后一个对象。 如果我通过为每个实例定义boxa和boxb手动添加侦听器,则它将起作用。我猜这是addEvent for循环无法按我期望的方式工作。也许我完全使用了错误的方法。 在容器4上使用class =“ container”触发器4的示例按预期方式工作。在容器4上的容器1,2,3触发事件上触发,但仅

  • 问题内容: 以传统方式添加事件侦听器: 但是我想适应addEventListener的方式: 它不起作用,因为我无法将getSelection()中的任何参数作为addEventListener方法中的第二个参数传递?据我所知,我只能使用没有括号的函数名。 任何的想法? 问题答案: 无需传递任何内容。用于的函数将自动绑定到当前元素。只需在您的函数中使用: 如果要将任意数据传递给函数,请将其包装在您

  • 问题内容: 我正在尝试在隐藏字段中发布数组,并希望在PHP中提交表单后检索该数组。 但是在打印发布的值后,我只能得到一个数组字符串。那么我该如何解决呢? 问题答案: 采用: 您将得到一个数组。

  • 我在保存输入项的容器div上有一个 的事件侦听器。但它仅适用于父 div,如果将鼠标悬停在输入上,则会触发 事件。捕获是否意味着输入正在触发父事件? 下面添加了事件监听器。 当您将元素拖到输入上时,会被触发,请参阅此处以获取显示问题的代码。http://codepen.io/ambrosedheffernan/pen/PPqdMd 注意:codepen中的代码在dragenter上有remove

  • 我有一个简单的JSON提要,我可以解析它并在控制台中看到它,但我似乎无法将它显示在我的表视图中。我使用的是Xcode 5.0.2。我不确定为什么在回显到控制台时可以在for循环中看到它,而在表视图中却看不到它。 PhotoTableViewController.m

  • Go 语言中 值类型 有:int 系列、float 系列、bool、string、数组、结构体 值类型通常在栈中分配存储空间 值类型作为函数参数传递,是拷贝传递 在函数体内修改值类型参数,不会影响到函数外的值 package main import "fmt" func main() { num := 10 change(num) fmt.Println(num) // 10 }