如何在我的setAttribute函数中内置数组子函数?

时间:2013-11-22 12:42:53

标签: javascript arrays

我编写了一个函数,可以在输入元素中自动插入属性(即每个案例适应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行,但我宁愿用数组来做。但是我该怎么做?我用Google搜索了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);
    }
}

但这不起作用 - 该属性仍然插入异常中。应该怎么做?我需要一个香草脚本解决方案。我也会对一本好的教程感到满意。您可能已经猜到了,这是我第一次使用这样的数组子功能。

1 个答案:

答案 0 :(得分:0)

评论中提供的解决方案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);
    }
}