【问题标题】:select onchange same value选择 onchange 相同的值
【发布时间】:2012-12-01 03:55:24
【问题描述】:

如果我打开下拉选择并选择相同的值无需点击离开以切换焦点,有没有办法触发事件?

我试过了

  1. onblur,但它只有在我在选择之外进行额外点击时才有效。

  2. onchange,但它只有在我选择不同的值时才有效。

如果我打开下拉菜单并选择任何内容,无论它是相同还是不同,我都需要触发一个事件。

<select name='show1' id='show1' onblur='dosomething(this);'>
<option value='1'>One</option>
<option value='2'>Two</option>
</select>

【问题讨论】:

  • 如果你能告诉我们你到目前为止所尝试的,那就更好了。
  • 正如我所说,我尝试了 onchange 并尝试了 onblur,但都没有达到预期效果
  • 我知道,所以向我们展示您的编码和问题。这将有助于了解您的确切问题。

标签: javascript html onchange onblur


【解决方案1】:

我认为您必须使用 onClick 事件并将先前选择的项目存储在变量中。

这是一个我认为可以使用重构的简单示例 :-)

    var dropboxOpen = false,
        oldItem     = null;
    function onClick(e) {
        if (dropboxOpen) {
            if (oldItem && oldItem === e.target.value) {
                console.log('same selected');
            }
            oldItem = e.target.value;   
        }        
        dropboxOpen = !dropboxOpen;
     }

http://jsfiddle.net/vtHPV/

【讨论】:

  • 如果使用键盘进行导航,此解决方案似乎无法可靠运行。 “onclick”事件的触发似乎不稳定,并且并不总是以我期望的方式改变,至少在我在 Chrome 中的测试中是这样。
【解决方案2】:

你使用什么库或框架并不重要,但这很简单。您本质上是在寻找两件事是真实的:

  1. 测试控件是否被点击。

  2. 测试一个值(任何值)是否已被选中,--或-- 仍处于选中状态。

数字 2 可以通过类似...的方式实现

var elem = document.getElementById("ddlViewBy");
var value = elem.options[elem.selectedIndex].value;

那么测试它是否为非空就很简单了。

【讨论】:

  • 我知道我可以通过 onclick 做到 #1。我怎么去#2?
  • 如果我理解正确,请纠正我。我做了一个 onclick,然后在函数内部测试是否有任何选择。如果是 - 我运行实际功能?
  • 是的。这应该可以满足您的需求。
  • 除了测试“点击”之外,您还应该检查键盘事件(用户可能会使用键盘来更改选择)。在这种情况下,您可能应该听“keyup”以及何时按下回车键。
【解决方案3】:

如果你使用 jQuery

你可以试试focus()事件。

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 2012-06-26
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多