用JavaScript设置超链接onClick

时间:2014-03-21 17:13:31

标签: javascript html

我需要有关此JavaScript代码的帮助。由于某种原因,无论我点击什么链接,变量“index”总是最终成为数组的最后一个索引。

var linkElements = document.getElementsByTagName('a');
var index;
var origOnClickArr = [];
for (index = 0; index < linkElements.length; ++index) {
    origOnClickArr.push(linkElements[index].onclick);
    linkElements[index].onclick = function (e) {
        if (confirm(message)) {
            origOnClickArr[index]();
        }
    };
}

2 个答案:

答案 0 :(得分:2)

尝试这样的事情

var linkElements = document.getElementsByTagName('a');
var index;
var origOnClickArr = [];
for (index = 0; index < linkElements.length; ++index) {
(function (index) {
    origOnClickArr.push(linkElements[index].onclick);
    linkElements[index].onclick = function (e) {
        if (confirm(message)) {
            origOnClickArr[index]();
        }
    };
})(index)
}

将for循环中的代码包装在自调用匿名函数中,并为每个循环传递index的值。

答案 1 :(得分:0)

您可以使用addEventListener添加到事件侦听器列表或删除事件侦听器。理想情况下,您将创建函数并使用javascript分配您想要调用的整个函数+执行确认的包装函数,而不是onclick事件的内联赋值。 (http://www.quirksmode.org/js/events_advanced.html)。

实现目标的一种方法是使用事件捕获/冒泡技术。

事件捕获从父元素发生到子元素,然后事件从子元素冒泡到父元素。

您可以指定捕获事件处理程序来进行确认。如果用户确认,则让事件继续传播。如果没有,那么停止传播。

未经测试但可能有效:

var message = 'Confirm';
function doConfirm()
{
   if (!confirm(message))
   {
       if (window.event)
       {
          if (window.event.stopPropagation) // w3c compliant browsers
          {
              event.stopPropagation();
          }
          else // Old IE browsers (ie 8 or ie 9 if i remember correctly)
          {
             event.cancelBubble = true;
          } 
       }
   }
}

var arr = document.getElementsByTagName("a");
for (var i = arr.length-; i >= 0; i--)
{
   arr[i].addEventListener("click", doConfirm, true); // true indicates capture phase.
}