在下拉列表/选择列表中选择已选择的项目
我一直在寻找这个问题的答案已经有一段时间了,没有运气,或者最多的错误解决方案。
我面临的问题是我有一个选择元素,当选择已经选择的项目时(显然)不会触发“onchange”事件。
像这样:
1 2 3
现在,说我先选择第1项。 然后我需要再次选择第1项。
这个function对我正在开展的项目的成功非常重要。
任何帮助是极大的赞赏。
编辑:(更多信息)
当我正在使用谷歌地图进行项目时,需要此function,用户可以通过下拉菜单快速跳转到某个国家/地区(例如,您在下拉列表中选择“西class牙”,谷歌地图将西class牙设置为您的视图。
问题出现在你想去西class牙,然后在地图上拖动,最后到达意大利。 现在你想回到西class牙,但你不能从下拉列表中选择它,直到你先选择其他东西。 我的老板不喜欢那个:)
Edit2:解决方案
所以现在有一些解决方案。 其中一个是抛出动作onblur(当没有聚焦控件时)这可以工作,因为我可以模糊更改列表,但仍然为人们再次选择相同的项目,模糊控件的触发器不会去,除非他们切换他们专注于自己,他们不会看到地图的变化。
我仍然无法理解为什么它应该如此难以找到一些事件,可以选择/点击/模糊或其他任何事情..生病继续看自己,并稍后回来看看。
编辑3:最终解决方案
是的,所以我终于设法让这个工作,不完全是它的精神,但足够接近,至少现在至少。
我想出的解决方案是在选择的顶部添加“请选择国家/地区”选项。 然后在更改时,我会将“请选择国家/地区”的文本和值更改为所选项目的值,并将selectedindex重置为0.这样,在选择西class牙时,它将位于列表处于禁用状态,并进一步处于工作状态。 所以现在你可以点击列表中间的西class牙返回西class牙,即使它仍然被选中(顶部项目是)
相当整洁,想法是由同事提供的。
脚本如下:
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; } Please select country spain sweden norway
我希望这会对某人有所帮助!
那些试图帮助我的人感谢你的想法和时间。
我认为如果选择相同的项目,则无法触发更改事件。 我们遇到了同样的问题所以我们所做的是一个简单的可用性黑客:当一个项目被选中时,我们向用户显示在一个范围内选择的项目,并将下拉值重置为其默认值(–Select–)。
HTH
这可能不是你想要的,但这是你可以决定的另一种选择。 选择该选项后,将其恢复为默认值(空的一个/第一个)选项
或者你可以做
但是当用户离开/模糊/取消焦点列表时,这种方式会调用你的函数(警报):p
我一直在寻找相同场景的解决方案,最后为同一场景编写了一个angularjs指令 –
guthub链接 – 角度选择
使用的element[0].blur();
从select标签中删除焦点。 逻辑是在下拉列表的第二次点击时触发此模糊。
即使用户在下拉列表中选择相同的值,也会触发as-select
。
演示 – 链接