请问这段javascript代码为什么执行不对?

window.onload=function()
{
var oTab=document.getElementById('tab1');
var oldColor='';
var oBtn=document.getElementById('btn1');
var oName=document.getElementById('name');
var oAge=document.getElementById('age');
var id=oTab.tBodies[0].rows.length+1;
var oBtn2=document.getElementById('btn2');
var oColor='';

oBtn2.onclick=function()
{

for(var i=0;i<oTab.tBodies[0].rows.length;i++)
{
oColor=oTab.tBodies[0].rows[i].style.backgroundColor;
if(oTab.tBodies[0].rows[i].cells[1].innerHTML==oName.value)
{
oTab.tBodies[0].rows[i].style.background='yellow';
}
else
{
oTab.tBodies[0].rows[i].style.background=oColor;
}
};
};

};
我自己感觉好像逻辑不对,但是不知道为什么不对。我本意是想查询到一个后此行变色,再查询另一个时又变回原来的颜色,但是试了不行(之前定义了隔行变色)

oBtn2的click事件代码内所用到的对象变量均应设为全局变量,因为这个事件代码并不是在window.onload中立即执行的,而是在oBtn2点击后才执行的,所以它里面用到的变量必须是全局变量才行,否则无效。

var oTab, oName, oColor;   //这三个变量设为全局的
window.onload=function()
{
oTab=document.getElementById('tab1'); //全局变量赋值不能用var
        var oldColor='';
var oBtn=document.getElementById('btn1');
oName=document.getElementById('name');  //同上
var oAge=document.getElementById('age');
var id=oTab.tBodies[0].rows.length+1;
var oBtn2=document.getElementById('btn2');
oColor='';   //同上

oBtn2.onclick=function()
{
for(var i=0;i<oTab.tBodies[0].rows.length;i++)
{
oColor=oTab.tBodies[0].rows[i].style.backgroundColor;
if(oTab.tBodies[0].rows[i].cells[1].innerHTML==oName.value)
{
oTab.tBodies[0].rows[i].style.background='yellow';
}
else
{
oTab.tBodies[0].rows[i].style.background=oColor;
}
};
};

};

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-09-04
不知道你的html代码,下面是我自己加的,不是你想要的话就把你要的效果说出来
简单点就是把oColor变量去掉,
把oTab.tBodies[0].rows[i].style.background=oColor;改成
oTab.tBodies[0].rows[i].style.background='';//写成两个单引号

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>js</title>
<style type="text/css">

</style>
<script src="js/jquery-2.1.4.min.js"></script>
<script>
window.onload=function()
{
var oTab=document.getElementById('tab1');
var oName=document.getElementById('name');
var oBtn2=document.getElementById('btn2');
oBtn2.onclick=function()
{

for(var i=0;i<oTab.tBodies[0].rows.length;i++)
{
console.log(oTab.tBodies[0].rows[i].cells[1].innerHTML==oName.value);
if(oTab.tBodies[0].rows[i].cells[0].innerHTML==oName.value)
{
oTab.tBodies[0].rows[i].style.background='yellow';
}
else
{
oTab.tBodies[0].rows[i].style.background='';
}
};
};

};
</script>
</head>

<body>
<input type="text" id="name">
<input type="button" id="btn2" value="dianw">
<table id="tab1">
<tr>
<td>1</td>
<td>dasd</td>
</tr>
<tr>
<td>2</td>
<td>sd</td>
</tr>
</table>
</body>
</html>追问

是的,把oColor去掉换成‘’就对了,但是颜色就都是白的了,我想要的是原来隔行变色还是原来的颜色的

追答

oColor=oTab.tBodies[0].rows[i].style.backgroundColor;

只能获取行间的样式
你可以直接将样式写在行间,虽然不是很规范,
例如

追问

我之前是用程序写的颜色样式:隔行变色的,没有单独定义样式

追答

你那个代码是写在行间样式了,

你把完整代码贴一下,我帮你测试一下

追问

追答

我做了一个类似的,循环tr,把tr的颜色存入一个数组,用的时候再取,

var oColor=[];
for(var i=0;i<oTab.tBodies[0].rows.length;i++){
var a=oTab.tBodies[0].rows[i].style.backgroundColor;

oColor.push(a);

}

把下面点击事件
oColor=oTab.tBodies[0].rows[i].style.backgroundColor;这个删掉

oTab.tBodies[0].rows[i].style.background=oColor;中的oColor改成oColor[i];

本回答被提问者采纳
相似回答