文档中单击链接的警报索引

时间:2015-03-15 12:07:41

标签: javascript jquery dom closures alert

需要编写函数来提醒文档中单击链接的索引。 例如:

 [html]
 <body>
    Links:<br/>
    <a href="//www.yahoo.com">Yahoo!</a><br/>
    <a href="//www.facebook.com">Facebook</a><br/>
    <a href="//www.google.com">Google</a><br/>
  </body>  
 [/html]

我的功能:

var as = document.getElementsByTagName('a');
  for (i = as.length; i>= 0; i--) {
    as[i].onclick = function() {
      alert(i);
    }
  }

请帮我修复错误

2 个答案:

答案 0 :(得分:2)

  

实际事件发生在你的for循环已经完成运行之后的某个时间,因此它的索引是最后一个值。您需要创建某种闭包,为​​每个事件处理程序唯一地保留i的值,以便它们每个都可以访问自己的值。有几种不同的方法可以做到这一点,但都涉及将i值传递给每个事件处理程序的函数。

演示@ fiddle

var as = document.getElementsByTagName('a');

for (var i=0, j=as.length; i<j; i++) {
    var link = as[i];
    (function(i){
        link.onclick = function() {
            alert (i);
        }
    }(i));
}

答案 1 :(得分:0)

由于您链接了jquery: DEMO

$('a').each(function(a, b){
    $(this).attr('id', a).on('click', function(e){
        e.preventDefault();
        alert($(this).attr('id'));
    });
});

如果您不想使用id来存储索引,那么您可以创建data-index

DEMO 2

$('a').each(function(a, b){
    $(this).attr('data-index', a).on('click', function(e){
        e.preventDefault();
        alert($(this).attr('data-index'));
    });
});