javascript - 多个 HTML 按钮调用相同的 JS 函数但具有不同的参数

标签 javascript onclick

从服务器接收到未知数​​量的字符串数组后,我尝试将每个数组打印为表格,并且每个表格都应该具有显示或不显示的选项。制作表格和 HIDE/SHOW 按钮的 JS 函数:

function printTable(data,color,name){
    var html = "<table border='1|1' id =";
    html += "'"+name+"'" ;
    html += " style='background-color:";
    html += color + "'";
    html += ">";
    html += "<tr>";
    html += "<th>"+name+"</th>";

    html += "</tr>";
    console.log("length is: "+ data.length);
    for (var i = 0; i < data.length; i++) {
        console.log(i);
        if (data[i]) {
            html += "<tr>";
            html += "<td>" + data[i] + "</td>";

            html += "</tr>";

        }
    }
        html+="</table>";
        console.log(html);
        var table = document.createElement('table');
        table.id = name+"Table";
        table.cellSpacing = "10";
        table.innerHTML = html;
        table.setAttribute("bgcolor",color);
        table.style.display = 'block';
        var button = document.createElement('button');
        button.id = name;
        var t = document.createTextNode("Show/Hide");
        button.appendChild(t);
        button.onclick = showHide;
        var div = document.createElement('div');
        div.appendChild(table);
        div.id = name+"Div";
        div.appendChild(button);
        document.getElementById('listsDiv').appendChild(div);

}

我还编写了隐藏/显示表格的函数:

 function showHide(name){
    var str = name + "Table" ;
    var x = document.getElementById(str);
    if (x.style.display === 'none') {
        x.style.display = 'block';
    } else {
        x.style.display = 'none';
    }
}

问题是,每个按钮的 onClick 属性都没有获得应有的功能。 如何在每个按钮中使用相同的功能,但具有不同的参数(名称)?

谢谢

最佳答案

说明

onClick内您可以访问Event目的。事件对象始终是第一个参数,并将自动传递给它。在您的情况下,nameevent 对象。 通过Event,您可以访问currentTarget - 您单击的元素。
另外,您可以在 onClick 等 eventHanlder 中使用 this 来获取当前目标。

代码

function showHide(event) {
    var elementId = event.currentTarget.getAttribute('name') + 'Table'
    // var elementId = this.getAttribute('name') + 'Table'
    var element = document.getElementById(elementId);
    var displayStyle = element.style.display
    if (displayStyle  === 'none') {
        displayStyle  = 'block';
    } else {
        displayStyle  = 'none';
    }
}

小技巧..if 语句可以用 ternary operator 写得更短

displayStyle === 'none' ? block' : 'none'

示例

document.querySelector('#btnPeter').onclick = showHideWithEvent
document.querySelector('#btnGeorg').onclick = showHideWithThis

function showHideWithEvent(event) {
    var name = event.currentTarget.getAttribute('name')
    console.log(name)
}

function showHideWithThis() {
    var name = this.getAttribute('name')
    console.log(name)
}
<button id="btnPeter" name="peter">Peter</button>
<button id="btnGeorg" name="georg">Georg</button>

关于javascript - 多个 HTML 按钮调用相同的 JS 函数但具有不同的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846698/

相关文章:

javascript - 如何保存iframe(scrollto)的x和y?是否可以?

javascript - <div> onClick 不起作用?

javascript - 单击 popover 触发元素时如何关闭/关闭 Bootstrap Popover?

php - JavaScript 函数中唯一 ID 的变量

javascript - 为点击事件定义和调用函数而不是内联函数

javascript - 如果阈值是 Number.MIN_VALUE,则查找数组中超过特定​​阈值的最小数的函数不会找到小于 1 的数字。如何解决这个问题?

javascript - 用

javascript - 使用 BackboneJS 模型时验证 ReactJS 输入

javascript - 如何使用 JavaScript 检测地址栏更改?

javascript - 如何在 select2 上调用 onclick 事件