将 onchange 脚本内联到外部 JS

Inline onchange script to external JS

我有一个表单选择器元素,它有一个跟随 onchange 的内联脚本:

<select onchange="this.className=this.options[this.selectedIndex].className">
     <option value="select">Select color</option>
     <option class="greenOpt" value="green" >Green</option>
    <option class="yellowOpt"   value="yellow" >Yellow</option>
    <option class="blueOpt" value="blue" >Blue</option>
</select>

这非常适合我的输出,将选项的背景颜色更改为与单词颜色相同的颜色,绿色为绿色,黄色为黄色等。

.greenOpt{
background-color: green;
text-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white;
}

.blueOpt{
  background-color: blue;
  text-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white;
  }

.yellowOpt{
  background-color: yellow;
  text-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white;
}

但我想将该 onchange 脚本移动到外部函数中,但我不确定它应该是什么样子。我明白我需要在 <select> 标签中做的是 onchange="colorSel()"

我目前的功能:

function colorSel() {
  var colors = document.getElementById("colors");
  colors = this.className = this.options[this.selectedIndex].className;
  }

我很难过。我已将函数的参数和 getElement 类型更改为许多不同的东西。我只是不明白。

您需要为更改事件附加处理程序

document.getElementById("colors").addEventListener('change', function (){ //Your logic goes here });

您没有提供颜色元素的代码,所以我用您提供的代码进行了一些演示:

change = function(selectObject) {
   selectObject.className= selectObject.options[selectObject.selectedIndex].className
}
.greenSel{
  background-color: green;
  text-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white;
}

.blueSel{
  background-color: blue;
  text-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white;
  }

.yellowSel{
  background-color: yellow;
  text-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white;
}
<select onchange="change(this)">
    <option value="select">Select color</option>
    <option class="greenSel" value="green" >Green</option>
    <option class="yellowSel"   value="yellow" >Yellow</option>
    <option class="blueSel" value="blue" >Blue</option>
</select>

您错过了将此传递给您的 onchange 方法并从所选选项中获取值。