如何重新选择已选择的选项
How to reselect already selected option
标题似乎令人困惑,但我想做的是......
只有当用户选择新选项时,我才知道如何处理 - $('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);
});
当我选择选项"蓝色">时,它会提醒值"蓝色",然后我选择"绿色",它也提醒"绿色"。 但是当我再次选择"绿色"时,没有任何反应。
这个问题引起了我的注意,因为这是非常基本的东西,但实际上没有人进一步深入研究它。OP 一直在使用 change()
,但是当您重新选择当前选定的选项时,不会触发任何内容!
我试过click()
,但它在您甚至可以选择一个选项之前就被触发了。
使用 blur()
,完成选择后,不会触发任何内容,因为 select 元素仍在聚焦,因此您需要聚焦,就像在外部单击一样才能执行。
所以我只是建议 OP 切换到 radio
类型的输入,然后使用click()
事件处理执行。这样,您仍然可以重新选择已标记的单选按钮。
但后来我注意到你只需要第二次点击<select>
元素,因为第一次点击会打开选项的下拉列表,第二次点击会返回所选选项的值。所以我想出了这个:
$('select').click(function(){
var $this = $(this);
if ($this.hasClass('open')) {
alert($this.val());
$this.removeClass('open');
}else {
$this.addClass('open');
}
});
但是现在的问题是,当您第一次单击<select>
时,将显示下拉列表,并且我们还添加了类'open'
。然后单击其他地方(不选择选项(,下拉列表将被隐藏,因此当您单击返回<select>
时,事件会在您甚至可以选择一个选项之前触发。
所以我添加了这段代码来解决这个问题:
$(document).click(function(e){
var $select = $('select');
if (!$select.is(e.target)){
$select.removeClass('open'); //reset the steps by removing open
}
});
你可以在这个jsfiddle中测试它。干杯!
我认为当<select>
失去关注时也是一个问题。所以我添加了blur()
事件。查看此更新 jsfiddle
我使用将选择重置为无的onclick='this.value=-1'
解决了......
我已经通过使用解决了这个问题:
$('#id_selec').on('click', 'option', function (e) {
value = $(this).val();
// ....
如果选择任何(包括已选择的(选项,处理程序将起作用。
在用户选择已选择的选项时不应发生任何事情的情况下,我想这是 DOM 的"功能",而不是没有事件发生的错误。 但是,如果您的代码在<select>
上做的比进行简单的选择更多,那也是一件麻烦事,所以我很感激其他人在这里解决了它。
当前接受的答案在使用单击事件来捕获已选择<select>
选项的选择方面很聪明,但是如果您愿意将列表的长度指定为(在本例中(<select size=3>
,则可以简单地从"更改"事件中将所选值设置为",并且每次都会触发相同的选择。
在这种情况下,OP 的示例将更改为:
.HTML:
<select size=3>
<option value="red">RED</option>
<option value="blue">BLUE</option>
<option value="green">GREEN</option>
</select>
j查询:
$('select').change(function(){
var val = $(this).val();
alert(val);
$('select').val("");
});
唯一的副作用是选择元素现在可能向用户显示为三行而不是一行。
(感谢柯比·L·华莱士(Kirby L. Wallace(将选择value
设置为"的想法(。
- CKeditor:更改对话框中的默认选择选项
- 如何在从多选下拉列表中选择选项值时动态生成文本框
- AngularJs列表ng单击以选择选项转换
- 使用基于文本的 Jquery 选择选项
- 当选择值x时,Javascript需要在正确的位置显示文本区域,从而循环通过具有选择选项的表单
- 在php和mysql中选择选项.一旦选择了选项,就列出我的sql数据库数据
- 选择选项时如何显示警报
- 使用php动态更改选择选项
- 选择“选择选项”时显示文本.怎么做
- LEAFLET地图和带有选择选项的标记-ANGULARjs
- 使用js将动态内容添加到选择选项列表中
- 用于使用javascript循环选择选项
- AngularJS-选择选项并在函数中使用它
- 禁用/启用基于单选/选择选项所选Javascript的文本框
- 如何使用jQuery隐藏与选择选项相关的选择选项列表
- 选择选项是添加或删除事件
- 使用jQuery向“选择选项”添加默认属性
- 构建HTML选择字段并使用JavaScript数组选择选项
- 带有动态选择选项的Firefox html5验证异常
- 只有当Angular从资源对象检索数据时,才选择选项元素