【问题标题】:Workaround: <Select>ing the first <option> never fires an onchange event解决方法:<Select> 执行第一个 <option> 永远不会触发 onchange 事件
【发布时间】:2013-11-15 13:14:49
【问题描述】:

我在网页上有一个选择选项块,我希望它针对其中选择的任何选项触发。但是,第一个选项永远不会触发 onselect:即使之前选择了后面的选项也不会。

例如,如果我的代码如下:

Settings:
Sensitivity: <select id="sensitivity" onchange="if (this.selectedIndex) ajaxUpdateConfig();">
  <option value="25">25%</option>
  <option value="50">50%</option>
  <option value="100" selected>100</option>
</select>

...然后选择第一个选项 25%,永远不会触发 onchange() 事件。

同样,如果第一个选项是默认值,并且用户离开它然后想要返回到它,那也不会触发 onchange 事件。

注意:我知道“第一个选择不会生成 onchange 事件”问题的标准答案是创建一个虚拟(禁用)的第一个选项。但这不符合此页面的设计:菜单表示显示当前状态,同时提供用户可以更改设置的选项。对于这个页面来说,有一个虚拟条目是糟糕的界面设计。

【问题讨论】:

  • SLaks 有答案,但我很确定你想使用 onchange 而不是 onselect
  • 没错。这就是我在尝试除 onchange 之外的其他不同选项时引用代码所得到的。它确实应该是 onchange - 编辑更正。

标签: javascript events onchange


【解决方案1】:

this.selectedIndex 对于第一个选项是 0
0 是假的,所以你的 if 永远不会触发。

完全摆脱if;没有理由。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2011-11-19
    • 1970-01-01
    • 2012-06-12
    • 2020-11-22
    相关资源
    最近更新 更多