我有以下功能。一切都有效,除了评论中提到的'if'语句。
function markRow(e) {
var row = e.currentTarget.value ;
var id, rid, field, color, ico ;
rid = markedrows.indexOf(row) ;
if (rid != -1) {
markedrows.splice(rid, 1) ;
ico = ICO_FOLDER + ICO_PLUS ;
color = COLOR_UNMARKED ;
} else {
markedrows.push(row) ;
ico = ICO_FOLDER + ICO_MINUS ;
color = COLOR_MARKED ;
}
e.currentTarget.src = ico ;
for (var col = 1 ; col <= current.cols() ; col++) {
alert(col) ;
alert(markedcols.toString()) ;
// This 'if' doesn't seem to work
if (markedcols.indexOf(col) == -1) {
// This part is ALWAYS executed even when the column is in markedcols
// I get no error messages in firefox
id = "r" + row + "c" + col ;
field = document.getElementById(id) ;
field.style.background = color ;
}
}
markedrows.sort(numericalorder) ;
}
alert
用于调试,它们清楚地表明markedcols
确实包含了应该包含的列,但indexOf
似乎没有抓住它。
据我所知,所有现代浏览器,特别是firefox现在支持数组上的indexOf
,所以我完全迷失了。我一遍又一遍地经历了代码的逻辑,它应该工作。它只是没有。
答案 0 :(得分:3)
我认为你的问题在于:
["1"].indexOf(1) === -1; // true
所以你可能需要.indexOf(col.toString())
。
虽然"1" == 1
,但.indexOf
似乎与===
进行比较。 V8 does, at least.
修改 ===
确实应该使用same
的状态:
让
searchElement
成为将严格等同比较算法应用于elementK
和same
的结果。如果
true
为k
,请返回{{1}}。