如何使用 javascript 更改带有 select 标签的 div 的背景图片?

How to change background image of div with select tag, using javascript?

我如何使用 select 标签更改我的 div 的背景图像,以便当某个选项被 selected 时背景发生变化,这是我的代码:

<div class="idcard" id="idcard-div"></div>
<div class="select-idcard" id="idcard-select">
        <p>Select Background Image</p>
        <select>
            <option id="idcard-option1" value="blue">Default/Blue</option>
            <option id="idcard-option2" value="red">Red</option>
            <option id="idcard-option3" value="purple">Purple</option>
            <option id="idcard-option4" value="green">Green</option>
        <select>
    </div>

Javascript代码:

var changeBgColor = function(){
        var idCardBg = document.getElementById("idcard-div");
        if(document.getElementById("idcard-option1").value === "blue"){
            idCardBg.style.backgroundImage = "url('tigerbg.jpg')";
        }else if(document.getElementById("idcard-option2").value === "red"){
            idCardBg.style.backgroundImage = "url('redbg.jpg')";
        }else if(document.getElementById("idcard-option3").value === "purple"){
            idCardBg.style.backgroundImage = "url('purplebg.jpg')";
        }else if(document.getElementById("idcard-option3").value === "green"){
            idCardBg.style.backgroundImage = "url('greenbg.jpg')";
        }else{
            idCardBg.style.backgroundImage = "url('tigerbg.jpg')";
        }
    };

..

changeBgColor();

你犯了几个错误。

首先,id 不匹配,您在 div 上使用了属性 class 而不是 id

此外,您应该获取 select 元素的值,而不是其选项的值。

最后,您当然必须将事件附加到 select 元素。我已经在下面的代码片段中的 HTML 中完成了此操作,但您也可以在 JavaScript 中使用 onchange 属性 或使用 addEventListener.

因此,除了遵循事件教程的善意建议外,我还建议您查看浏览器中的开发人员工具。它们包含一个 JavaScript 控制台,如果代码是 运行,它会显示错误。因此,一旦附加了事件,您就可以查看控制台以查找其他错误。

无论如何,这次我已经为你做到了。以下是固定片段。我还使用该值来设置背景颜色,因此您可以在不访问实际图像的情况下大致看到它的工作情况。

var changeBgColor = function(){
      
  var idCardBg = document.getElementById("idcard");
  idCardBg.style.backgroundImage = "url('tigerbg.jpg')";

  if(document.getElementById("select-idcard").value === "blue"){
    idCardBg.style.backgroundImage = "url('tigerbg.jpg')";
  }else if(document.getElementById("select-idcard").value === "red"){
    idCardBg.style.backgroundImage = "url('redbg.jpg')";
  }else if(document.getElementById("select-idcard").value === "purple"){
    idCardBg.style.backgroundImage = "url('purplebg.jpg')";
  }else if(document.getElementById("select-idcard").value === "green"){
    idCardBg.style.backgroundImage = "url('greenbg.jpg')";
  }else{
    idCardBg.style.backgroundImage = "url('tigerbg.jpg')";
  }
  idCardBg.style.backgroundColor = document.getElementById("select-idcard").value;

};
<div id="idcard">
  <p>Select Background Image</p>
  <select onchange="changeBgColor();" id="select-idcard">
    <option id="idcard-option1" value="blue">Default/Blue</option>
    <option id="idcard-option2" value="red">Red</option>
    <option id="idcard-option3" value="purple">Purple</option>
    <option id="idcard-option4" value="green">Green</option>
  </select>
</div>

HTML 变化

<select id="colorSelect" onchange="changeBgColor();">
  <option value="blue">blue</option>
  <option value="red">red</option>
</select>

JS 更改(使用 select.options 数组及其值)

var changeBgColor = function(){
  var idCardBg = document.getElementById("idcard-select");
  var colorSelect = document.getElementById("colorSelect");
  switch (colorSelect.options[colorSelect.selectedIndex].value)
  {
    case 'blue': idCardBg.style.backgroundImage = "url('bluebg.jpg')"; break;
    case 'red': idCardBg.style.backgroundImage = "url('redbg.jpg')"; break;
    default:
      idCardBg.style.backgroundImage = "url('tigerbg.jpg')";
    break;
  }
}