在下拉列表中选择已选择的项目/选择-列表

xzc*_*xzc 5 html javascript jquery select drop-down-menu

我一直在寻找这个问题的答案已有一段时间了,最​​大程度上没有运气或错误的解决方案。

我面临的问题是我有一个select元素(显然)在选择已选择的项目时不会触发“ onchange”事件。

像这样:

<select onchange="alert(this.value);">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
Run Code Online (Sandbox Code Playgroud)

现在,说我首先选择项目1。然后,我需要再次选择项目1。

此功能对于我正在从事的项目的成功至关重要。

任何帮助是极大的赞赏。

编辑:(更多信息)

此功能是必需的,因为我正在使用带有谷歌地图的项目进行工作,在该项目中,向用户展示带有下拉菜单的演示文稿以快速跳至某个国家(例如,在下拉菜单中选择“西班牙”,谷歌地图将西班牙设置为视图)。

问题出在您想去西班牙,然后在地图上拖动并最终到达意大利时。现在您想回到西班牙,但是您无法从下拉菜单中选择它,直到您先选择其他东西。我的老板不喜欢这样:)

Edit2:解决方案

因此,现在有一些解决方案。其中之一是将动作模糊处理(当使控件失去焦点时),这可以起作用,因为我可以使onchange列表模糊,但是对于再次选择同一项目的人来说,模糊控件的触发器不会消失,除非他们切换他们自己集中精力,他们不会看到地图的变化。

仍然我不明白,为什么很难找到一些在选项选择/单击/模糊或其他方面引起麻烦的事件。请继续看我自己,然后稍后再回到这里。

编辑3:最终解决方案

没错,所以我终于设法使这项工作变得不尽如人意,但无论如何现在还是足够接近。

我想到的解决方案是在选择的顶部添加“请选择国家”选项。然后,在更改时,我将文本和“请选择国家”的值更改为所选项目的文本,并将所选索引重置为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>
Run Code Online (Sandbox Code Playgroud)

我希望这会对某人有所帮助!

对于那些试图帮助我的人,感谢您的想法和时间。

bun*_*ito 1

这可能不完全是您想要的,但这是您可以决定的另一种选择。选择选项后,将其恢复为默认(空的/第一个)选项

<select onchange="alert(this.value);this.value='';">
 <option value='' selected='selected'></option>
 <option>1</option>
 <option>2</option>
 <option>3</option>
</select>
Run Code Online (Sandbox Code Playgroud)

或者你可以做

<select onblur="alert(this.value);">
 <option>1</option>
 <option>2</option>
 <option>3</option>
</select>
Run Code Online (Sandbox Code Playgroud)

但这种方式会在用户离开/模糊/取消焦点列表时调用您的函数(警报):p