【问题标题】:Changing div background color using switch statement使用 switch 语句更改 div 背景颜色
【发布时间】:2017-11-07 19:03:12
【问题描述】:

请原谅超级初学者的麻烦,但我正在尝试使用 javascript 开关使 div 更改颜色。我确信这个问题与对参数如何工作的基本误解有关,但正如我所说,我是新手。我没有收到任何错误,它什么也没做。另外,第一次在这里发帖,如果我在帖子中做任何不当之处,我深表歉意。

function colorChanger(color) {
  switch(color) {
		case "red":
			document.getElementById("color_box").style.backgroundColor = "red";
			break;
		case "orange":
			document.getElementById("color_box").style.backgroundColor = "orange";
			break;
		case "yellow":
			document.getElementById("color_box").style.backgroundColor = "yellow";
			break;
		case "green":
			document.getElementById("color_box").style.backgroundColor = "green";
			break;
		case "blue":
			document.getElementById("color_box").style.backgroundColor = "blue";
			break;
		case "indigo":
			document.getElementById("color_box").style.backgroundColor = "indigo";
			break;
		case "violet":
			document.getElementById("color_box").style.backgroundColor = "violet";
			break;		
	}
}
@viewport {
    zoom: 1.0;
    width: device-width;
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

#color_box {
	width: 20rem;
	height: 20rem;
	border: solid 1px;
}
<!DOCTYPE html>
<html>
<head>
	<title>Color Buttons</title>
	<link rel="stylesheet" type="text/css" href="./color_buttons.css">
	<script src="color_buttons.js"></script>
</head>
<body>
<div id="color_box">
</div>
<div id="button_box">
	<button type="button" id="red" onclick="colorChanger(red)">Red</button>
	<button type="button" id="orange" onclick="colorChanger(orange)">Orange</button>
	<button type="button" id="yellow" onclick="colorChanger(yellow)">Yellow</button>
	<button type="button" id="green" onclick="colorChanger(green)">Green</button>
	<button type="button" id="blue" onclick="colorChanger(blue)">Blue</button>
	<button type="button" id="indigo" onclick="colorChanger(indigo)">Indigo</button>
	<button type="button" id="violet" onclick="colorChanger(violet)">Violet</button>
</div>
</body>
</html>

【问题讨论】:

    标签: javascript html dom switch-statement


    【解决方案1】:

    您需要在参数周围加上引号以使它们成为字符串。

    <button type="button" id="red" onclick="colorChanger('red')">Red</button>
    

    没有引号,它正在寻找一个名为red 的变量。

    之所以没有报错,是因为颜色和按钮的 ID 相同,而 ID 都变成了全局变量,指向对应的 DOM 元素。所以它就像你写的那样:

    onclick="colorChanger(document.getElementById('red'))"
    

    由于这不等于 switch 语句中的任何情况,所以什么都不会发生。

    顺便说一句,为什么要打扰 switch 语句?做吧:

    document.getElementById("color_box").style.backgroundColor = color;
    

    【讨论】:

      【解决方案2】:

      您需要在参数周围加上引号以使它们成为字符串。否则,只需使用 this.id 传递 id

      function colorChanger(color) {
        switch(color) {
      		case "red":
      			document.getElementById("color_box").style.backgroundColor = "red";
      			break;
      		case "orange":
      			document.getElementById("color_box").style.backgroundColor = "orange";
      			break;
      		case "yellow":
      			document.getElementById("color_box").style.backgroundColor = "yellow";
      			break;
      		case "green":
      			document.getElementById("color_box").style.backgroundColor = "green";
      			break;
      		case "blue":
      			document.getElementById("color_box").style.backgroundColor = "blue";
      			break;
      		case "indigo":
      			document.getElementById("color_box").style.backgroundColor = "indigo";
      			break;
      		case "violet":
      			document.getElementById("color_box").style.backgroundColor = "violet";
      			break;		
      	}
      }
      @viewport {
          zoom: 1.0;
          width: device-width;
      }
      
      * {
          margin: 0;
          padding: 0;
          box-sizing: border-box;
      }
      
      #color_box {
      	width: 20rem;
      	height: 20rem;
      	border: solid 1px;
      }
      <!DOCTYPE html>
      <html>
      <head>
      	<title>Color Buttons</title>
      	<link rel="stylesheet" type="text/css" href="./color_buttons.css">
      	<script src="color_buttons.js"></script>
      </head>
      <body>
      <div id="color_box">
      </div>
      <div id="button_box">
      	<button type="button" id="red" onclick="colorChanger(this.id)">Red</button>
      	<button type="button" id="orange" onclick="colorChanger(this.id)">Orange</button>
      	<button type="button" id="yellow" onclick="colorChanger(this.id)">Yellow</button>
      	<button type="button" id="green" onclick="colorChanger(this.id)">Green</button>
      	<button type="button" id="blue" onclick="colorChanger(this.id)">Blue</button>
      	<button type="button" id="indigo" onclick="colorChanger(this.id)">Indigo</button>
      	<button type="button" id="violet" onclick="colorChanger(this.id)">Violet</button>
      </div>
      </body>
      </html>

      正如@Barmar 所说,为什么要打扰 switch 语句?做吧:

      document.getElementById("color_box").style.backgroundColor = color;这样的

      function colorChanger(color) {
        document.getElementById("color_box").style.backgroundColor = color;
      }
      @viewport {
        zoom: 1.0;
        width: device-width;
      }
      
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      
      #color_box {
        width: 20rem;
        height: 20rem;
        border: solid 1px;
      }
      <!DOCTYPE html>
      <html>
      
      <head>
        <title>Color Buttons</title>
        <link rel="stylesheet" type="text/css" href="./color_buttons.css">
        <script src="color_buttons.js"></script>
      </head>
      
      <body>
        <div id="color_box">
        </div>
        <div id="button_box">
          <button type="button" id="red" onclick="colorChanger(this.id)">Red</button>
          <button type="button" id="orange" onclick="colorChanger(this.id)">Orange</button>
          <button type="button" id="yellow" onclick="colorChanger(this.id)">Yellow</button>
          <button type="button" id="green" onclick="colorChanger(this.id)">Green</button>
          <button type="button" id="blue" onclick="colorChanger(this.id)">Blue</button>
          <button type="button" id="indigo" onclick="colorChanger(this.id)">Indigo</button>
          <button type="button" id="violet" onclick="colorChanger(this.id)">Violet</button>
        </div>
      </body>
      
      </html>

      【讨论】:

      • 这些东西让我大吃一惊!我喜欢它!
      【解决方案3】:

      你也可以使用jQuery:

      	$('button').click(function(){
      		 var id = this.id
      		
      		switch(id){
      			case "red":
      				$('#color_box').css('background-color', 'red');
      				break;
      			case "orange":
      				$('#color_box').css('background-color', 'orange');
      				break;
      			case "yellow":
      				$('#color_box').css('background-color', 'yellow');
      				break;
      			case "green":
      				$('#color_box').css('background-color', 'green');
      				break;
      			case "blue":
      				$('#color_box').css('background-color', 'blue');
      				break;
      			case "indigo":
      				$('#color_box').css('background-color', 'indigo');
      				break;
      			case "violet":
      				$('#color_box').css('background-color', 'violet');
      				break;
      
      		}
      	});
      	@viewport {
      		zoom: 1.0;
      		width: device-width;
      	}
      
      	* {
      		margin: 0;
      		padding: 0;
      		box-sizing: border-box;
      	}
      
      	#color_box {
      		width: 20rem;
      		height: 20rem;
      		border: solid 1px;
      	}
      <div id="color_box">
      </div>
      <div id="button_box">
      	<button type="button" id="red">Red</button>
      	<button type="button" id="orange">Orange</button>
      	<button type="button" id="yellow">Yellow</button>
      	<button type="button" id="green">Green</button>
      	<button type="button" id="blue">Blue</button>
      	<button type="button" id="indigo">Indigo</button>
      	<button type="button" id="violet">Violet</button>
      </div>
      
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

      【讨论】:

        【解决方案4】:

        您只需将颜色名称参数作为字符串传递,将所有颜色名称用单引号括起来,就像在调用函数colorChanger('color')时一样

            <button type="button" id="red" onclick="colorChanger('red')">Red</button>
            <button type="button" id="orange" onclick="colorChanger('orange')">Orange</button>
            <button type="button" id="yellow" onclick="colorChanger('yellow')">Yellow</button>
            <button type="button" id="green" onclick="colorChanger('green')">Green</button>
            <button type="button" id="blue" onclick="colorChanger('blue')">Blue</button>
            <button type="button" id="indigo" onclick="colorChanger('indigo')">Indigo</button>
            <button type="button" id="violet" onclick="colorChanger('violet')">Violet</button>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-15
          • 1970-01-01
          • 2012-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-24
          • 1970-01-01
          相关资源
          最近更新 更多