我编写了一个函数,可以在输入元素中自动插入属性(即每个案例适应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);
}
}
但这不起作用 - 该属性仍然插入异常中。应该怎么做?我需要一个香草脚本解决方案。我也会对一本好的教程感到满意。您可能已经猜到了,这是我第一次使用这样的数组子功能。
答案 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);
}
}