我已经寻找这个问题的答案很长一段时间了,但没有运气,或者最多有错误的解决方案。
我面临的问题是我有一个选择元素(显然)在选择已选择的项目时不会触发“onchange”事件。
像这样:
<select onchange="alert(this.value);">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
现在,假设我首先选择第 1 项。
然后我需要能够再次选择项目 1。
这个功能对于我正在从事的项目的成功非常重要。
任何帮助是极大的赞赏。
编辑:(更多信息)
需要此功能,因为我正在开发一个带有谷歌地图的项目,其中用户会看到一个下拉列表,可以快速跳转到一个国家/地区(例如,您在下拉列表中选择“西班牙”,谷歌地图将西班牙设置为您的视图。
当你想去西班牙,然后在地图上拖动,最终到达意大利时,问题就出现了。现在您想返回西班牙,但您无法从下拉列表中选择它,除非您先选择其他内容。我的老板不喜欢这样:)
编辑2:解决方案
所以现在有一些解决方案。
其中之一是将动作放在模糊上(当控制不聚焦时)could工作,因为我可以在更改时模糊列表,但对于再次选择同一项目的人来说,模糊控件的触发器不会消失,除非他们自己切换焦点,否则他们不会看到地图的更改。
我仍然无法理解为什么很难找到一些在选项选择/单击/模糊或其他什么上执行的事件。我会继续寻找自己,稍后再回来查看。
编辑3:最终解决方案
是的,我终于成功地让这个工作了,虽然不完全是原来的样子,但足够接近了,至少现在是这样。
我想出的解决方案是在选择顶部添加“请选择国家/地区”选项。
然后在更改时,我会将文本和“请选择国家/地区”的值更改为所选项目的值,并将 selectedindex 重置为 0。
这样,当选择西班牙时,它将在禁用状态下位于列表顶部,在工作状态下位于列表顶部。所以现在您可以单击列表中间的西班牙返回西班牙,即使它仍然处于选中状态(顶部项目是)
非常简洁,想法是由同事提供的。
脚本如下:
var dummyOption;
function setdummyCountry(obj)
{
var selectedOption = obj.options[obj.selectedIndex];
if (dummyOption != null) {
dummyOption.text = selectedOption.text;
dummyOption.value = selectedOption.value;
}
else {
dummyOption = document.createElement("option");
dummyOption.text = selectedOption.text;
dummyOption.value = selectedOption.value;
dummyOption.setAttribute("disabled", "true");
obj.options[0] = dummyOption;
}
obj.selectedIndex = 0;
}
<select onchange="setdummyCountry(this);">
<option value="">Please select country</option>
<option value="ES">spain</option>
<option value="SE">sweden</option>
<option value="NO">norway</option>
</select>
我希望这会对某人有所帮助!
感谢那些试图帮助我的人,感谢你们的想法和时间。