a[i]为什么加上事件显示undifined?怎么改class为title-li的className?这两个alert类型为什么不一样?

kekekaole 2017-04-08 12:38:32
谢谢帮忙看一下~
想通过改className改变class为title-li的ul的样式,但是显示a[i]未定义,不明白为什么,那么要怎么样才能改特定ul的样式?


<script>
window.onload=function(){
var a = document.getElementsByTagName("ul");
alert(a.length);
for (var i=0;i<a.length ;i++ ){
if(a[i].className=="li-title"){
alert(typeof a[i]);
a[i].onmouseover=function(){
alert(typeof a[i]);
a[i].className="ss";
}
}
}
}

</script>
</head>

<body>
<ul class="li-title" id="li1">
<li class="active">房产</li
><li>家居</li
><li>二手房</li>
</ul>
<ul class="content active">
<li>275万购昌平邻铁三居 总价20万买一居</li>
<li>200万内购五环三居 140万安家东三环</li>
<li>北京首现零首付楼盘 53万购东5环50平</li>
<li>京楼盘直降5000 中信府 公园楼王现房</li>
</ul>
<ul class="li-title hide">
<li>40平出租屋大改造 美少女的混搭小窝</li>
<li> 经典清新简欧爱家 90平老房焕发新生</li>
<li>新中式的酷色温情 66平撞色活泼家居</li>
<li>瓷砖就像选好老婆 卫生间烟道的设计</li>
</ul>
<ul class="content hide">
<li>通州豪华3居260万 二环稀缺2居250w甩</li>
<li>西3环通透2居290万 130万2居限量抢购</li>
<li>黄城根小学学区仅260万 121平70万抛!</li>
<li>独家别墅280万 苏州桥2居优惠价248万</li>
</ul>

</body>
</html>
...全文
197 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kekekaole 2017-04-10
  • 打赏
  • 举报
回复
引用 4 楼 jslang 的回复:
[quote=引用 3 楼 kekekaole 的回复:] [quote=引用 2 楼 jslang 的回复:] 事件执行时,for循环早就结束了,这个时候i已经是最大值加1了。 你在事件中用alert(i)输出i的值就明白了。 解决方法是用闭包把每次循环i的值保存起来

for (var i = 0; i < a.length; i++) {
   	(function(k) {
   		if (a[k].className == "li-title") {
   			a[k].onmouseover = function() {
   				a[k].className = "ss";
   			}
   		}
   	}(i));
}
非常感谢,说的很明白了 还是有点不明白的地方,悬赏很低了不足表达谢意 如果可以的话,麻烦还得问下,显示的错误是,Cannot read property 'className' of undefined 这个不能设置className的属性是什么? 另外循环结束了,if条件就没有==li-title的元素,不会执行if里的语句,为什么还会出错啊。[/quote] 这个if是判断要为哪个元素绑定事件。这时事件不会执行。 触发事件时只执行事件function(){}中的代码,这是和那个if就没关系了。 报错的是事件a[i].className="ss";这一行。 因为i超出数组最大下标,a[i]返回undefined,undefined不是对象,访问undefined的属性当然出错了。 [/quote] 哎呀说的太明白了大神~还回复的这么快~感激感激~~祝你彩票中大奖兄弟~
天际的海浪 2017-04-09
  • 打赏
  • 举报
回复
引用 3 楼 kekekaole 的回复:
[quote=引用 2 楼 jslang 的回复:] 事件执行时,for循环早就结束了,这个时候i已经是最大值加1了。 你在事件中用alert(i)输出i的值就明白了。 解决方法是用闭包把每次循环i的值保存起来

for (var i = 0; i < a.length; i++) {
   	(function(k) {
   		if (a[k].className == "li-title") {
   			a[k].onmouseover = function() {
   				a[k].className = "ss";
   			}
   		}
   	}(i));
}
非常感谢,说的很明白了 还是有点不明白的地方,悬赏很低了不足表达谢意 如果可以的话,麻烦还得问下,显示的错误是,Cannot read property 'className' of undefined 这个不能设置className的属性是什么? 另外循环结束了,if条件就没有==li-title的元素,不会执行if里的语句,为什么还会出错啊。[/quote] 这个if是判断要为哪个元素绑定事件。这时事件不会执行。 触发事件时只执行事件function(){}中的代码,这是和那个if就没关系了。 报错的是事件a[i].className="ss";这一行。 因为i超出数组最大下标,a[i]返回undefined,undefined不是对象,访问undefined的属性当然出错了。
kekekaole 2017-04-09
  • 打赏
  • 举报
回复
引用 2 楼 jslang 的回复:
事件执行时,for循环早就结束了,这个时候i已经是最大值加1了。 你在事件中用alert(i)输出i的值就明白了。 解决方法是用闭包把每次循环i的值保存起来

for (var i = 0; i < a.length; i++) {
   	(function(k) {
   		if (a[k].className == "li-title") {
   			a[k].onmouseover = function() {
   				a[k].className = "ss";
   			}
   		}
   	}(i));
}
非常感谢,说的很明白了 还是有点不明白的地方,悬赏很低了不足表达谢意 如果可以的话,麻烦还得问下,显示的错误是,Cannot read property 'className' of undefined 这个不能设置className的属性是什么? 另外循环结束了,if条件就没有==li-title的元素,不会执行if里的语句,为什么还会出错啊。
天际的海浪 2017-04-08
  • 打赏
  • 举报
回复
事件执行时,for循环早就结束了,这个时候i已经是最大值加1了。 你在事件中用alert(i)输出i的值就明白了。 解决方法是用闭包把每次循环i的值保存起来

for (var i = 0; i < a.length; i++) {
   	(function(k) {
   		if (a[k].className == "li-title") {
   			a[k].onmouseover = function() {
   				a[k].className = "ss";
   			}
   		}
   	}(i));
}
cn00439805 2017-04-08
  • 打赏
  • 举报
回复

window.onload=function(){
  var a = document.getElementsByTagName("ul");
   for (var i=0;i<a.length ;i++ ){
          if(a[i].className.indexOf("li-title") != -1){
                  a[i].onmouseover = (function(i){
					 return function(){
					 	a[i].className= a[i].className.replace("li-title","ss");
					 }
                   })(i)
         }
   }
}
内容概要:本文围绕基于Basisformer模型的时间序列锂离子电池SOC(State of Charge,荷电状态)预测展开研究,利用PyTorch框架实现深度学习模型的构建与训练。通过将历史充放电数据作为输入,Basisformer能够有效捕捉电池状态的动态变化特征,提升SOC预测精度。文中详细介绍了模型结构设计、数据预处理流程、训练策略及实验结果分析,并与传统方法进行对比,验证了该方法在复杂工况下的优越性与鲁棒性。该研究不仅展示了Basisformer在时序建模中的潜力,也为电池管理系统提供了高精度的状态估计解决方案。; 适合人群:具备一定Python编程基础和深度学习理论知识,熟悉PyTorch框架,从事电池管理系统、新能源汽车或智能预测方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于电动汽车、储能系统等领域的电池SOC高精度实时估算;②为电池健康管理(BMS)提供可靠的状态输入;③推动深度学习在时间序列预测中的实际落地,提升现有预测模型的泛化能力与稳定性; 阅读建议:建议读者结合标题为【锂电池SOC估计】【PyTorch】基于Basisformer时间序列锂离子电池SOC预测研究(python代码实现)的资源,重点研读所提供的Python代码,深入理解数据处理方式与模型网络结构的设计思路,尝试调整超参数以观察对预测性能的影响,从而全面掌握Basisformer在时序建模中的优势、适用边界及工程化实现路径。

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧