【发布时间】:2011-05-11 12:38:45
【问题描述】:
我一直在寻找这个问题的答案已经有一段时间了,没有运气,或者最多有错误的解决方案。
我面临的问题是我有一个选择元素(显然)在选择已选择的项目时不会触发“onchange”事件。
像这样:
<select onchange="alert(this.value);">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
现在,假设我先选择项目 1。 然后之后我需要能够再次选择项目 1。
此功能对于我正在从事的项目的成功非常重要。
非常感谢任何帮助。
编辑:(更多信息)
当我正在使用谷歌地图进行项目时需要此功能,在该项目中,用户可以通过下拉菜单快速跳转到一个国家/地区(例如,您在下拉菜单中选择“西班牙”,谷歌地图将西班牙设置为您的视图。
当您想去西班牙,然后在地图上拖动,最终到达意大利时,问题就来了。现在你想回到西班牙,但你不能从下拉列表中选择它,直到你先选择其他东西。我的老板不喜欢这样:)
Edit2:解决方案
所以现在有一些解决方案。 其中之一是将动作 onblur (当取消控制焦点时)这可以工作,因为我可以模糊列表 onchange,但仍然对于再次选择相同项目的人来说,模糊控件的触发器不会去,除非他们自己切换焦点,否则他们不会看到地图的变化。
我仍然不明白为什么很难找到一些在选项选择/单击/模糊或其他方式上执行的事件。我会继续寻找自己,稍后再回来查看。
编辑 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>
我希望这会对某人有所帮助!
对于那些试图帮助我的人,感谢您的想法和时间。
【问题讨论】:
-
如果您将 onchange 更改为 onclick,这会为您解决吗?
-
您能否添加更多信息,说明您为什么需要这种行为?我们或许可以为您提供更好的选择
-
只需先写下所有选项,然后添加一个带有
selected标签的选项。所有选项都在数组中吗?请解释更多 -
#thesupertramp 在某种程度上是的。我已经阅读了该帖子,但其中的解决方案似乎无法解决我的问题。我快要疯了,这有多难。如果我无法找到解决方案,我猜一个(蹩脚的)解决方案是将重置事件绑定到谷歌地图的拖动端。因此,每当您拖动时,将所选索引重置为“请选择一个项目”或其他内容。我的老板不会喜欢那样...
-
在我看来,重置事件 ondrag 是可行的方法,并且是良好的可用性设计。一旦你从“西班牙”拖走,那么你就不再专注于西班牙。它不会在“意大利”上有意义,但仍将“西班牙”显示为所选国家/地区。
标签: javascript jquery html select drop-down-menu