如果新值与旧值相同,如何在 HTMLSelectElement 上触发更改事件?

IT技术 javascript dom-events html-select onchange
2021-03-10 02:36:52

我有以下标记:

<select onchange="jsFunction()">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

当用户下拉组合框并选择先前选择的相同选项(或根本不更改选择)时,JavaScript 不会将其视为onchange事件。所以,jsFunction()不叫。jsFunction()即使在这种情况下我也想要被调用。我怎样才能做到这一点?

6个回答

我会这样做:

<select onchange="jsFunction()">
  <option value="" disabled selected style="display:none;">Label</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>

如果您愿意,您可以使用与第一个选项相同的标签,在本例中为 1。更好:在框中为选项放置一个标签。

如果我希望默认选择其中一个选项,则此解决方案对我不起作用。
2021-04-30 02:36:52
每当我要显示组合框时,我都会将selecedIndex设置为 0。完美的作品!!
2021-05-07 02:36:52

你必须添加空选项来解决它,

我还可以为您提供另一种解决方案,但这取决于您是否适合您,因为用户在选择 jsFunction 以外的其他选项后选择默认选项将被调用两次。

<select onChange="jsFunction()" id="selectOpt">
    <option value="1" onclick="jsFunction()">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

function jsFunction(){
  var myselect = document.getElementById("selectOpt");
  alert(myselect.options[myselect.selectedIndex].value);
}
我之前尝试过 ONCLICK.. 不适用于所有浏览器.. 特别是 Chrome。
2021-04-24 02:36:52

只需将selectIndex关联<select>标签的 设置-1为处理事件的最后一步。

mySelect = document.getElementById("idlist");
mySelect.selectedIndex = -1; 

它每次都有效,删除突出显示并允许您再次选择相同(或不同)的元素。

试试这个。只需添加一个空选项。这将解决您的问题。

<select onchange="jsFunction()">
    <option></option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>​
这将在顶部创建一个空框,它也是可选的。不是一个很好看的解决方案。
2021-05-01 02:36:52
这适用于第一个选项。When other option is selected and again the user selects the same option??
2021-05-01 02:36:52

对每个选项元素使用“onmouseup”属性。它很冗长,但应该可以工作。此外,根据您的函数实际在做什么,您可以稍微不同地安排事情,假设该数字在处理程序中很重要:

<select>
<option onmouseup="handler()" value="1">1</option>  //get selected element in handler
<option onmouseup="handler(2)" value="2">2</option>  //explicitly send the value as argument
<option onmouseup="handler(this.value)" value="3">3</option> //same as above, but using the element's value property and allowing for dynamic option value. you could also send "this.innerHTML" or "this.textContent" to the handler, making option value unnecessary
</select>
我觉得这个解决方案不受欢迎,因为它给页面增加了很多膨胀。例如,在一个有 50 行表格的页面上,每行都有一个下拉控件,选择中有 10 个选项,对于具有 31 个字符的通用解决方案,这涉及插入 15500 个字符。这已经进入了向页面添加大量批量的区域。
2021-05-07 02:36:52
我也对此进行了测试,在使用键盘导航或选择元素的情况下,此解决方案完全无法工作。正如预期的那样,根本没有任何东西被解雇。
2021-05-10 02:36:52