Javascript 运行函数onclick。正在单击的所有按钮

Javascript 运行函数onclick。正在单击的所有按钮,javascript,html,Javascript,Html,我有许多按钮都有class=“clearSelect”。我希望这些按钮在单击时执行函数。我不熟悉javascript,不太清楚为什么会出现这种情况,但我认为我的函数正在执行,而不是只执行onclick 下面的代码调用了所有其他函数,导致单击每个按钮 代码: var buttons=document.getElementsByClassName(“clearSelect”);//类为“clearSelect”的对象 对于(变量i=0;i

我有许多按钮都有
class=“clearSelect”
。我希望这些按钮在单击时执行函数。我不熟悉javascript,不太清楚为什么会出现这种情况,但我认为我的函数正在执行,而不是只执行
onclick

下面的代码调用了所有其他函数,导致单击每个按钮

代码:

var buttons=document.getElementsByClassName(“clearSelect”);//类为“clearSelect”的对象
对于(变量i=0;i
以下是正在调用的函数:

function clearOrSelectAll(btn) {
    var cleartab = clearButtonSet[btn];
    var selecttab = selectButtonSet[btn];
    // console.log("clicked!");
    if (cleartab != null) {
        getOSList(cleartab, false);
    } else {
        getOSList(selecttab, true);
    }
}

function getOSList(tabVal, fate) {
    var configTab = document.getElementById(tabVal);
    var browserList = configTab.getElementsByClassName("browser_list");
    // var idObjs = browserList.getElementsByTagName("li");
    for (var h = 0; h < browserList.length; h++) {
        var idObjs = browserList[h].getElementsByTagName("li");
        // console.log(h);
        // console.log(idObjs);
        // select all
        if (fate) {
            for (var i = 0; i < idObjs.length; i++) {
                if (configs[idObjs[i].id] == null) {
                    idObjs[i].className = "selected";
                    configs[idObjs[i].id] = config_dictionary[idObjs[i].id];
                }
            }
        // clear all
        } else {
            for (var j = 0; j < idObjs.length; j++) {
                if (configs[idObjs[j].id] == null) {
                    idObjs[j].className = "unselected";
                    delete configs[idObjs[j].id];
                }
            }
        }
    }
}
函数clearOrSelectAll(btn){
var cleartab=clearButtonSet[btn];
var selecttab=selectButtonSet[btn];
//log(“单击!”);
if(cleartab!=null){
getOSList(cleartab,false);
}否则{
getOSList(selecttab,true);
}
}
函数getOSList(tabVal,fate){
var configTab=document.getElementById(tabVal);
var browserList=configTab.getElementsByClassName(“浏览器列表”);
//var idObjs=browserList.getElementsByTagName(“li”);
for(var h=0;h
在for循环中,当您将事件附加到所有按钮时,您正在调用clearOrSelectAll函数。您可能希望将其包装在匿名函数中,以确保仅在触发事件时调用它

//非理想解决方案:请参见编辑
button.onclick=函数(){
clearOrSelectAll(按钮id);
}
EDIT:已经指出,当通过onclick属性或addEventListener方法附加事件处理程序时,“this”上下文变量将指向相关元素。因此,如果您引用它,而不是使用“button”作为闭包,并且指望javascript引擎不会对循环进行过多优化(因为这会在调用事件时弄乱“button”的值),那么它可能会更干净(并且更容易阅读)


button.onclick=function(){
clearOrSelectAll(此.id);
};

在for循环中,当您将事件附加到所有按钮时,您正在调用clearOrSelectAll函数。您可能希望将其包装在匿名函数中,以确保仅在触发事件时调用它

//非理想解决方案:请参见编辑
button.onclick=函数(){
clearOrSelectAll(按钮id);
}
EDIT:已经指出,当通过onclick属性或addEventListener方法附加事件处理程序时,“this”上下文变量将指向所讨论的元素。因此,它可能更干净(更易于阅读)如果您要引用它,而不是使用“button”作为闭包,并指望javascript引擎不会过度优化循环(因为这会在调用事件时弄乱“button”的值)


button.onclick=function(){
clearOrSelectAll(此.id);
};

在for循环中,当您将事件附加到所有按钮时,您正在调用clearOrSelectAll函数。您可能希望将其包装在匿名函数中,以确保仅在触发事件时调用它

//非理想解决方案:请参见编辑
button.onclick=函数(){
clearOrSelectAll(按钮id);
}
EDIT:已经指出,当通过onclick属性或addEventListener方法附加事件处理程序时,“this”上下文变量将指向所讨论的元素。因此,它可能更干净(更易于阅读)如果您要引用它,而不是使用“button”作为闭包,并指望javascript引擎不会过度优化循环(因为这会在调用事件时弄乱“button”的值)


button.onclick=function(){
clearOrSelectAll(此.id);
};

在for循环中,当您将事件附加到所有按钮时,您正在调用clearOrSelectAll函数。您可能希望将其包装在匿名函数中,以确保仅在触发事件时调用它

//非理想解决方案:请参见编辑
button.onclick=函数(){
clearOrSelectAll(按钮id);
}
EDIT:已经指出,当通过onclick属性或addEventListener方法附加事件处理程序时,“this”上下文变量将指向所讨论的元素。因此,它可能更干净(更易于阅读)如果您要引用它,而不是使用“button”作为闭包,并指望javascript引擎不会过度优化循环(因为这会在调用事件时弄乱“button”的值)


button.onclick=function(){
clearOrSelectAll(此.id);
};

@Christopher非常接近,但是
按钮.id
应该是
这个.id

button.onclick = function() {
  clearOrSelectAll(this.id);
}
原因
按钮.id
不起作用,可以用以下代码演示:

var按钮=文档
button.onclick = function() {
  clearOrSelectAll(this.id);
}