javascript 如何重新选择已选择的选项

k4emjkb1  于 2022-12-21  发布在  Java
关注(0)|答案(4)|浏览(187)

标题看起来很混乱但我想做的是...
我知道如何处理只有当用户选择新的选项与此-$('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);
});

当我选择“蓝色”选项时,它会提醒一个值“蓝色”,然后我选择“绿色",它也会提醒”绿色“。但当我再次选择”绿色“时,什么也没发生。

holgip5t

holgip5t1#

这个问题引起了我的注意,因为这是非常基本的东西,但没有人真正深入研究它。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

yzxexxkh

yzxexxkh2#

我解决了使用onclick='this.value=-1'重置选择为空...

cdmah0mi

cdmah0mi3#

我已经解决了这个问题,使用:

$('#id_selec').on('click', 'option', function (e) {
    value = $(this).val();
    // ....

如果您选择任何选项(包括已选择的选项),则处理程序将工作。

2skhul33

2skhul334#

在用户选择已经选中的选项时不应该发生任何事情的情况下,我认为这是DOM的一个"特性",而不是没有Event发生的bug。但是,如果您的代码使用<select>做的事情比简单的选择多,这也是一个麻烦,所以我很感激其他人在这里解决了这个问题。
current accepted answer在使用click事件捕获已选择<select>选项的选择方面非常聪明,但是***如果您愿意将列表的长度指定为***(在本例中)<select size=3>,则只需从"change" Event中将所选值设置为"",每次都会触发相同的选择。
在这种情况下,the OP's example将更改为:

    • 超文本标记语言:**
<select size=3>
    <option value="red">RED</option>
    <option value="blue">BLUE</option>
    <option value="green">GREEN</option>
</select>
    • jQuery:**
$('select').change(function(){
    var val = $(this).val();
    alert(val);
    $('select').val("");
});

唯一的副作用是***selection元素现在可能向用户显示为三行而不是一行***。
(将select的value设置为""的想法归功于Kirby L. Wallace)。

相关问题