获取点击按钮javascript的id

时间:2015-02-03 02:46:35

标签: javascript cross-browser addeventlistener

我试图简单地获取单击按钮的ID并使用警报来显示它。如果不是addEventListener,则下面的代码会转到attachEvent。为了获取ID,我试图将this.id作为参数传递给myFunction。但这不起作用。我已经看过很多使用Jquery和类似的很好的解决方案,但不幸的是我必须只使用普通的JS。如何获取单击按钮的ID并将其存储在要显示的变量中?

function addEvents()
{
    var buttonArray=document.getElementsByClassName('mainButton');
    for(i=0; i < buttonArray.length; i++)
    {
        if (document.addEventListener) {
        buttonArray[i].addEventListener("click", myFunction(this.id));
        } else if (document.attachEvent) {
        buttonArray[i].attachEvent("onclick", myFunction(this.id));
}

function myFunction(clickedId) {
    alert("Button" + clickedId + "was clicked.");
} 
}
    }

4 个答案:

答案 0 :(得分:3)

实际上你不需要将参数传递给myFunction。这是一个回调函数,您可以使用事件变量。

function addEvents()
{
    var buttonArray = document.getElementsByClassName('mainButton');
    for(i = 0; i < buttonArray.length; i++)
    {
        if (document.addEventListener) {
            buttonArray[i].addEventListener("click", myFunction);
        } 
        else { 
            if (document.attachEvent) {
                buttonArray[i].attachEvent("onclick", myFunction);
            }
        }
    }
}

function myFunction(e) {
    alert("Button " + e.target.id + " was clicked.");
}

这是jsfiddle

答案 1 :(得分:0)

您需要按如下方式修改代码:

function addEvents()
{
    var buttonArray = document.getElementsByClassName('someclass');

    for(i=0; i < buttonArray.length; i++)
    {
        if (document.addEventListener) {
          buttonArray[i].addEventListener("click", myFunction);
        } else if (document.attachEvent) {
          buttonArray[i].attachEvent("onclick", myFunction);
        }

        function myFunction(e) {
            alert("Button" + e.target.id + "was clicked.");
        }
    }
}

myFunction是回调函数,通过使用myFunction(id)调用函数,从而破坏了回调的目的。

答案 2 :(得分:0)

目前,此代码循环遍历页面上的mainButton按钮,对于每个按钮,调用myFunction并将事件侦听器设置为myFunction的返回值。由于myFunction没有返回任何内容,因此事件侦听器也被设置为nothing。可能你正在寻找的东西是这样的:

if (document.addEventListener) {
    buttonArray[i].addEventListener("click",
        function() { myFunction(this.id); });
}
else if (document.attachEvent) {
    buttonArray[i].attachEvent("onclick",
        function() { myFunction(this.id); });
}

最好将myFunction的声明移到for循环之外。

答案 3 :(得分:0)

试试这个:

&#13;
&#13;
Element.prototype.addEvent = function(eventName, callFunction) {
  if (this.addEventListener) this.addEventListener(eventName.substring(2), callFunction, false);
  else if (this.attachEvent) this.attachEvent(eventName, callFunction);
};


function clicked(e) {	
  alert(this.id);
}


document.getElementById('myButton').addEvent('onclick', clicked);
&#13;
<input id="myButton" type="button" value="Click me">
&#13;
&#13;
&#13;