我有一个输入表单,它允许我从多个选项中进行选择,并在用户更改选择时执行一些操作。例如,
<select onChange="javascript:doSomething();">
<option>A</option>
<option>B</option>
<option>C</option>
</select>
现在,doSomething()只在选择改变时被触发。
我想在用户选择任何选项时触发doSomething(),可能是相同的选项。
我已经尝试使用“onClick”处理程序,但在用户开始选择过程之前被触发。
那么,是否有一种方法在用户每次选择时触发一个函数?
更新:
Darryl提出的答案似乎有效,但并不总是有效。有时,当用户单击下拉菜单时,甚至在用户完成选择过程之前,事件就会被触发!
2022香草javascript
...因为这是谷歌的热门节目。
最初的海报没有要求一个JQuery解决方案,但所有的答案只演示JQuery或内联选择标签事件。
使用'change'事件监听器。
const selectDropdown = document.querySelector('select');
selectDropdown.addEventListener('change', function (e) { /* your code */ });
... 或者调用一个单独的函数:
function yourFunc(e) { /* your code here */ }
const selectDropdown = document.querySelector('select');
selectDropdown.addEventListener('change', yourFunc);
这里有几件事要做,以确保它记住旧的值,并在再次选择相同的选项时触发onchange事件。
首先你需要一个常规的onChange事件:
$("#selectbox").on("change", function(){
console.log($(this).val());
doSomething();
});
要想在再次选择相同的选项时触发onChange事件,可以在下拉菜单接收焦点时通过将其设置为无效值来取消设置所选选项。但你也想存储之前选择的值,以便在用户没有选择任何新选项的情况下恢复它:
prev_select_option = ""; //some kind of global var
$("#selectbox").on("focus", function(){
prev_select_option = $(this).val(); //store currently selected value
$(this).val("unknown"); //set to an invalid value
});
上面的代码将允许您触发onchange,即使选择了相同的值。但是,如果用户在选择框外单击,则希望恢复以前的值。我们在onBlur上做:
$("#selectbox").on("blur", function(){
if ($(this).val() == null) {
//because we previously set an invalid value
//and user did not select any option
$(this).val(prev_select_option);
}
});