如何在我的setAttribute函数中构建数组中的子函数

How to build-in array sub-function in my setAttribute function?

本文关键字:构建 数组 子函数 函数 我的 setAttribute      更新时间:2023-09-26

我已经编写了一个函数,它可以在输入元素中自动插入一个属性(即一个根据情况调整的onclick函数)。它也有一些例外。它看起来是这样的,出于清晰的原因有些简化:

function insertAttribute() {
var allInputs = document.getElementsByTagName('input');
var allInputsCount = allInputs.length;
var thatInput = null;
for (i = 0; i < allInputsCount; i++) {
    thatInput = allInputs[i];
    var highlightFunction = "highlightItem('"+thatInput.name+"-row','"+thatInput.name+"-button')";
    if ((thatInput.name != "A") && (thatInput.name != "B") && (thatInput.name != "C"))
        thatInput.setAttribute("onclick",highlightFunction);
    }
}

问题是,有大约20个例外。我可以扩展if行,但我更愿意使用数组。但是我该怎么做呢?我在谷歌上搜索了how to use array in javascript function,(顶部的两个)结果建议我应该这样做:

function insertAttribute() {
var allInputs = document.getElementsByTagName('input');
var allInputsCount = allInputs.length;
var thatInput = null;
for (i = 0; i < allInputsCount; i++) {
    thatInput = allInputs[i];
    var highlightFunction = "highlightItem('"+thatInput.name+"-row','"+thatInput.name+"-button')";
    var exceptedArray = ["A","B","C"];
    if (thatInput.name != exceptedArray)
        thatInput.setAttribute("onclick",highlightFunction);
    }
}

但这不起作用——该属性仍然插入到异常中。应该怎么做?我需要一个普通的脚本解决方案。我也会很高兴有一个好的教程。正如您可能已经猜到的,这是我第一次使用这样的数组子函数。

注释中提供的解决方案exceptedArray.indexOf(thatInput.name)==-1适用于大多数浏览器,但不适用于IE8。其脚本调试器表示不支持indexOf。它在其他情况下也是如此,但显然不是在这种情况下。

在此期间,我学会了如何让脚本循环通过数组。这适用于所有浏览器:

var allInputs = document.getElementsByTagName('input');
var allInputsCount = allInputs.length;
var thatInput = null;
for (var i=0; i<allInputsCount; i++) {
    thatInput = allInputs[i];
    var highlightFunction = "highlightItem('"+thatInput.name+"-row','"+thatInput.name+"-button')";
    var exceptedNamesArray = ["A","B","C","A4dTInput","A4eTInput"];
    var excNamesArrayCount = exceptedNamesArray.length;
    var excName = null;
    for (var j=0; j<excNamesArrayCount; j++) {
        excName = exceptedNamesArray[j];
        if (thatInput.name != excName)
        thatInput.setAttribute("onclick",highlightFunction);
    }
}