javascript的添加样式问题
迷茫
迷茫 2017-04-10 16:04:04
[JavaScript讨论组]

遇到1个问题,请大神指点一下,不知道错在哪里了,请高手帮忙指点一下,谢谢

下面是JS代码

下面是HTML代码

class="active"的CSS代码我就不贴了,就一个背景颜色
我就想实现,点击1个a标签的时候,就自动给A标签加上class="active",当点击另外一个a标签,这个a标签的class 就为空了

但是我写出来的代码检查了N遍感觉都没有错,调用JS的路径也没错,包括直接把JS代码放在页面里也不行,真不知道问题出在哪里了,求大神指点下,谢谢!

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(6)
大家讲道理

先不说别的,你的这种编程方式就有很大问题。
你在循环里面不停的创建Function对象??你觉得合适么?
我在 @hjzheng 的答案基础上改的:

window.onload = function() {
  var
  eTab = document.getElementById("tab"),
  eAs  = eTab.getElementsByTagName("a"),
  evA  = function() {
    for (var i = 0; i < eAs.length; i ++) {
      eAs[i].className = "";
    }
    this.className = 'red';
  };
  
  for (var i = 0; i < eAs.length; i ++) {
    eAs[i].onclick = evA;
  }
};

测试地址:
http://jsbin.com/sonubinuba/edit?html,css,js,console,output

希望可以帮到你 :)

天蓬老师

http://segmentfault.com/a/1190000000471569

大家讲道理
(function(i){
    oLi[i].onclick=function(){
        for(var j=0;j<oLi.length;j++){
            oLi[j].className="";
        }
        this.className="active";
    }
})(i);
ringa_lee

http://jsfiddle.net/zguangyu/efs71oLj/4/

天蓬老师

因为你里面的循环用的变量也叫i

PHP中文网

你把 onclick 函数里面的for循环里的变量 i 改成 j 就好了, ES5中js的for循环没有
作用域,这里的i和j相当于onload函数里面的全局变量,我在jsbin里面改好了, 你可以看看是不是这个效果:http://jsbin.com/cixeli/edit?html,css,js,console,output

给个建议,如果遇到类似的问题,最好可以在jsBin里面重现,方便大家帮你看。


补充,感谢 @小_秦 和 @li305263 函数里面用i是没问题的,每个函数有自己的作用域,我修改了答案,两个i不会相互干扰的,至于楼主到底哪里错了,我真心没看出来,看看会不会是样式的问题。

新的jsbin:http://jsbin.com/cixeli/edit?html,css,js,console,output

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号