javascript改变div样式,在if条件语句中没有效果
大家讲道理
大家讲道理 2017-04-11 11:46:05
[JavaScript讨论组]

使用原生js修改p的样式,在if条件语句中没有效果
点击一个p设置背景颜色为红色
通过if判断第三次点击时,背景变为黑色
结果发现if里面的代码并不能再控制台中体现出来





Title



去掉alert,p会一直显示为红色,究竟是什么原因产生的这种结果,求各位大神解答

我不明白的是为什么用alert中断了,可是控制台里面仍然是而不是

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(6)
PHP中文网

你没有return啊

if(i == s){
   i = 0;
   //执行完这一段后跳出了if
   p.style.background = '#000';
}
//又执行了这一段代码,所以又变成了红色
p.style.background = '#f00';

应该改成


if(i == s){
   i = 0;
   return p.style.background = '#000';
}
p.style.background = '#f00';
大家讲道理

不是最后还有一句p.style.background = '#f00';么,你if里只是用了alert中断,但是并没有return跳出去啊,所以还是会继续向后执行的。


建议在i++前边加一句debugger然后单步跟一下吧。

巴扎黑
       if(i == s){
            i = 0;
            p.style.background = '#000';
            alert("alert阻断,p变色了,为什么控制台没有变化,仍然是红色?");
        }else{
            p.style.background = '#f00';
        }
天蓬老师

楼主,你的判断只有if,没有else,所以就算前面的背景颜色修改了,也会一直默认为红色,像楼上那样子改了之后就可以了

天蓬老师

LZ不要纠结控制台的问题了,不同的浏览器可能会有不同的渲染优化方法。

比如说我在chrome上测的,连颜色都不会改变:

firefox上面,颜色会变,值只会变一个:

所以其实这个浏览器的渲染机制有关,和代码无关。。。

你要是想知道的话,考虑研究一下chrome渲染的机制是什么吧。。。

大家讲道理

你的这个写法应该是这样的吧

var p = document.querySelector('.p');
    var i = 0;
    var s = 3;
    p.onclick = function(){
        i++;
        if(i == s){
            i = 0;
            p.style.background = '#000';
            console.log(i)
            // alert("alert阻断,p变色了,为什么控制台没有变化,仍然是红色?");
        }else{
            p.style.background = '#f00';
        }
    };
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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