Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单javascript可以';我不知道它在哪里';这是不对的_Javascript - Fatal编程技术网

简单javascript可以';我不知道它在哪里';这是不对的

简单javascript可以';我不知道它在哪里';这是不对的,javascript,Javascript,我不知道这个简单的javascript哪里出了问题 <!DOCTYPE html> <html> <head> <title> </title> <script> function changeColor() { var elem = document.getElementById("para1"); if (elem.style.color == black) {

我不知道这个简单的javascript哪里出了问题

<!DOCTYPE html>
<html>
<head>
<title> </title>
<script>
   function changeColor() {
        var elem = document.getElementById("para1");
        if (elem.style.color == black) {
            elem.style.color = blue
        }
        else if (elem.style.color == blue) {
            elem.style.color = red
        }
        else if (elem.style.color == red) {
            elem.style.color = black
        }
    }
    </script>
</head>

<body>
    <p id="para1"> Some text here</p>
    <button onclick='changeColor();'>Change!</button>
    <!-- <button onclick='changeColor("red");'>red</button> -->
</body>
</html>

函数changeColor(){
var elem=document.getElementById(“para1”);
if(elem.style.color==黑色){
elem.style.color=蓝色
}
else if(elem.style.color==蓝色){
elem.style.color=红色
}
else if(elem.style.color==红色){
elem.style.color=黑色
}
}

这里有一些文字

改变

意识到用javascript调试比用VBA调试要困难得多——我用过它。

你的颜色值缺少引号

elem.style.color = 'red';

如果没有引号,则将其作为变量读取,添加引号以检查这些字符串

var elem = document.getElementById("para1");
    switch(elem.style.color){
       case 'black':
                elem.style.color = 'blue'
                break;
       case 'blue':
                elem.style.color = 'red';
                break;
       case 'red':
                elem.style.color = 'black';
                break;
    }

有两个问题

第一个是每个人都指出的,在分配颜色值时应该使用字符串,例如:

elem.style.color = "black";
但第二个更微妙。从
elem.style.color
返回的字符串不是可靠的
“黑色”
“蓝色”
等,即使这是您指定的。它可以是“rgb(0,0,0)”或类似类型

因此,您需要单独跟踪“当前”颜色,如下所示:

function changeColor() {
    var elem = document.getElementById("para1");
    var color = elem.getAttribute("data-color");
    if (!color || color == "black") {
        color = elem.style.color = "blue";
    }
    else if (color == "blue") {
        color = elem.style.color = "red";
    }
    else if (color == "red") {
        color = elem.style.color = "black";
    }
    elem.setAttribute("data-color", color);
}

在这里,我使用了一种方法来跟踪指定给元素的颜色,我知道这种方法不会转换为RGB值。(我也使用了字符串,而不是变量名,比如
“black”
“blue”
等等。)

black
和其他文字应该用引号括起来,例如,
“black”
。Ohhhhh。。。。。。。。。。。。。。我没有别的话可说了。投票结束。因为太本地化了。对不起,用JavaScript调试怎么会更难呢?再简单不过了。。。Chrome开发者工具(按F12键时可用)和FireBug在其中发挥了巨大作用,允许在代码中的任何地方使用
控制台。记录
,甚至转储对象和错误。你还想要什么?当然,除了一步一步的调试之外……“意识到使用javascript进行调试要比使用VBA困难得多”胡说八道。每个现代浏览器都内置了一个功能合理的调试器,其中一些相当不错。2004年,调试客户端JavaScript是一件痛苦的事情。2013年不会。@user2135737:请注意在您打算支持的所有浏览器上进行测试。Brad在设置值方面非常正确,但您不能依赖稍后比较时返回的内容(跨浏览器)。也就是说,通常情况下,您在比较时从
style.color
返回的字符串不是
“黑色”
“红色”
,而是
“rgb(0,0,0)”
“rgb(255,0,0)”
(不同的浏览器不同).@T.J.Crowder,很有趣。。。我以为你会得到之前设定的一切。很高兴知道!问题是,你不一定能拿回你设定的东西。你可以将
设置为“黑色”
,但稍后阅读时返回
“rbg(0,0,0)”
或类似设置。嘿,sam,我尝试了你的代码,但在我的web浏览器firefox上无效。最后,一个未定义的
黑色
跑掉了your@VisioN:啊!谢谢,谢谢TJ克劳德!Javascript确实比VBA更复杂!这是非常好的信息!我刚刚从Mozilla DN中挑选了一个简单的例子(虽然很简单)!