标题看起来很混乱但我想做的是...
我知道如何处理只有当用户选择新的选项与此-$('select').change(function(){})
。
但如果用户想选择已经选择的选项则不需要。
我也尝试过使用radio
,但情况相同。
好的,例如我有一个带有选项(红,蓝,绿色)的选择。
<select>
<option value="red">RED</option>
<option value="blue">BLUE</option>
<option value="green">GREEN</option>
</select>
我有这样一个剧本:
$('select').change(function(){
var val = $(this).val();
alert(val);
});
当我选择“蓝色”选项时,它会提醒一个值“蓝色”,然后我选择“绿色",它也会提醒”绿色“。但当我再次选择”绿色“时,什么也没发生。
4条答案
按热度按时间holgip5t1#
这个问题引起了我的注意,因为这是非常基本的东西,但没有人真正深入研究它。OP一直在使用
change()
,但当你重新选择当前选择的选项时,没有任何东西被激发!我试过
click()
,但是在你选择一个选项之前,它就开始工作了。对于
blur()
,在完成选择之后,不会触发任何内容,因为select元素仍然处于焦点状态,因此需要像单击外部元素那样将焦点移出,以便执行它。所以我建议OP切换到
radio
类型输入,然后用click()
事件处理执行。这样你仍然可以重新选择已经标记的单选按钮。但是我注意到你只需要第二次点击
<select>
元素,因为第一次点击会打开选项的下拉列表,第二次点击会返回你选择的选项的值。但现在的问题是当你第一次点击
<select>
时,下拉菜单会显示出来,我们还添加了类'open'
,然后点击其他地方(不选择选项),下拉菜单会隐藏起来,所以当你点击<select>
时,事件会在你选择选项之前触发。所以我添加了以下代码来修复:
你可以在这个jsfiddle中测试一下。干杯!
我认为当
<select>
失去它的焦点时也是一个问题。所以我添加了blur()
事件。查看此更新jsfiddleyzxexxkh2#
我解决了使用
onclick='this.value=-1'
重置选择为空...cdmah0mi3#
我已经解决了这个问题,使用:
如果您选择任何选项(包括已选择的选项),则处理程序将工作。
2skhul334#
在用户选择已经选中的选项时不应该发生任何事情的情况下,我认为这是DOM的一个"特性",而不是没有Event发生的bug。但是,如果您的代码使用
<select>
做的事情比简单的选择多,这也是一个麻烦,所以我很感激其他人在这里解决了这个问题。current accepted answer在使用click事件捕获已选择
<select>
选项的选择方面非常聪明,但是***如果您愿意将列表的长度指定为***(在本例中)<select size=3>
,则只需从"change" Event中将所选值设置为"",每次都会触发相同的选择。在这种情况下,the OP's example将更改为:
唯一的副作用是***selection元素现在可能向用户显示为三行而不是一行***。
(将select的
value
设置为""的想法归功于Kirby L. Wallace)。