javascript - 迭代对象数组并防止仅使用 javascript 的默认 anchor href 链接

标签 javascript arrays

var people = [
  { firstname:"Micro",  lastname:"Soft", site:"http://microsoft.com" },
  { firstname:"Face",   lastname:"Book", site:"http://facebook.com" },
  { firstname:"App",    lastname:"Le",   site:"http://apple.com" },
  { firstname:"Master", lastname:"Card", site:"http://mastercard.com" }
];

以及 DOM 中的以下列表:

<ul id="people">
  <li><a href="http://microsoft.com">microsoft.com</a></li>
  <li><a href="http://facebook.com">facebook.com</a></li>
  <li><a href="http://apple.com">apple.com</a></li>
  <li><a href="http://mastercard.com">mastercard.com</a></li>
</ul>

假设数组中项目的顺序与列表中列表项目的顺序相匹配(如上所示),将必要的事件处理程序附加到 DOM,这样点击这些链接中的任何一个都不会将您带到href 中链接的网站,但会提醒网站创建者的名字和姓氏(包含在数组数据中)。

我已经设法阻止 anchor 标记的默认行为,但无法在点击函数中获取名字和姓氏。

var listElements = document.getElementById("people").getElementsByTagName("A");
var people = [
  { firstname:"Micro",  lastname:"Soft", site:"http://microsoft.com" },
  { firstname:"Face",   lastname:"Book", site:"http://facebook.com" },
  { firstname:"App",    lastname:"Le",   site:"http://apple.com" },
  { firstname:"Master", lastname:"Card", site:"http://mastercard.com" }
];
for (var i = 0; i < people.length; i++) {
            listElements[i].addEventListener('click', function (event, i) {
              event.preventDefault();
            });
        }
<ul id="people">
  <li><a href="http://microsoft.com">microsoft.com</a></li>
  <li><a href="http://facebook.com">facebook.com</a></li>
  <li><a href="http://apple.com">apple.com</a></li>
  <li><a href="http://mastercard.com">mastercard.com</a></li>
</ul>

谁能帮我在点击功能中获取 firstnamelastname

最佳答案

您可以使用 let并像下面这样重写你的代码来实现这一点,

for (let i = 0; i < people.length; i++) {
  listElements[i].addEventListener('click', function(event) {
    event.preventDefault();
    console.log(people[i].firstname,people[i].lastname);
  });
}

基本上 let 将帮助我们创建一个作用域为 block 的变量,因此如果我们在这种情况下使用 let ,由闭包引起的问题不会对我们造成伤害。

DEMO

如果你的环境不支持 ES6,那么尝试像下面这样在每次迭代中创建一个范围,

for (var i = 0; i < people.length; i++) {
  (function(i){
    listElements[i].addEventListener('click', function(event) {
      event.preventDefault();
      console.log(people[i].firstname,people[i].lastname);
    });
  })(i);
}

DEMO

关于javascript - 迭代对象数组并防止仅使用 javascript 的默认 anchor href 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37178487/

相关文章:

javascript - 从哪里可以获得 Google Charts 使用的所有颜色模式的列表?

java - 如果数组为空则打印空消息

c - 二维数组与一维数组的性能

c - 编写一个程序来交换数组中的值

javascript - 动态生成集成参数的函数数组?

自定义模板的 Javascript 字符串替换器

javascript - 我想构建一个 chrome 扩展,它将更新某些页面但没有任何弹出窗口

javascript - 无法从javascript中的数组获取/获取键

javascript - 如何使用 Gulp 和 Browserify 初始化 Flux 数据?

php - 从 mysql 构建数组,并插入 fputcsv 的值