我有一个输入表单,它允许我从多个选项中进行选择,并在用户更改选择时执行一些操作。例如,

<select onChange="javascript:doSomething();">
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>

现在,doSomething()只在选择改变时被触发。

我想在用户选择任何选项时触发doSomething(),可能是相同的选项。

我已经尝试使用“onClick”处理程序,但在用户开始选择过程之前被触发。

那么,是否有一种方法在用户每次选择时触发一个函数?

更新:

Darryl提出的答案似乎有效,但并不总是有效。有时,当用户单击下拉菜单时,甚至在用户完成选择过程之前,事件就会被触发!


当前回答

唯一正确的答案是不使用选择字段(如果您需要在重新选择相同的答案时执行某些操作)。

创建一个下拉菜单与传统的div,按钮,显示/隐藏菜单。链接:https://www.w3schools.com/howto/howto_js_dropdown.asp

如果能够将事件监听器添加到选项中,就可以避免这种情况。如果select元素有onSelect监听器。如果点击选择字段没有烦人地触发mousedown, mouseup,和同时点击mousedown。

其他回答

首先,你使用onChange作为事件处理程序,然后使用标志变量,使它做你想要的功能,每次你做一个改变

<select

var list = document.getElementById("list"); Var标志= true; 列表。Onchange = function () { 如果(国旗){ 文档。背景=“红色”; Flag = false; 其他}{ 文档。背景=“绿色”; Flag = true; } } <选择id = "列表" > <选项> op1 > < /选项 <选项> op2 > < /选项 <选项> op3 > < /选项 < /选择>

只是一个想法,但有可能把每个<option>元素的onclick ?

<select>
  <option onclick="doSomething(this);">A</option>
  <option onclick="doSomething(this);">B</option>
  <option onclick="doSomething(this);">C</option>
</select>

另一种选择是在选择上使用onblur。这将在用户单击离开选择时触发。此时,您可以确定选择了什么选项。为了在正确的时间触发,选项的onclick可以模糊字段(在jQuery中使其他东西活跃或只是.blur())。

你可以使用onChange: http://www.w3schools.com/TAGS/tag_Select.asp

摘自http://www.faqs.org/docs/htmltut/forms/_SELECT_onChange.html onChange指定当用户选择其中一个选项时要运行的JavaScript。这意味着当用户选择一个项目时,操作将立即启动,而不是当按下“提交”按钮时。

<select name="test[]" 
onchange="if(this.selectedIndex < 1){this.options[this.selectedIndex].selected = !1}">
<option>1</option>
<option>2</option>
<option>3</option>
</select>

我发现的最佳解决方案是在select元素的第一个元素中添加一个禁用选项,以便所有其他项目都可以响应onchange事件中的单击。

<select onchange="doSomething()">
  <option disabled selected value> -- select an option -- </option>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>