在下拉列表中的onchange事件

问题描述 投票:3回答:4

我的代码如下:

<!DOCTYPE html>
<html>
<body>
    <script>    
        function tab()
        {
            current=document.getElementById("test");
            next=document.getElementById("run");
            if(current.value!="-1")
            {
                next.focus()
            }
        }
    </script>
    <select id="test" onchange="tab()">
        <option value="-1">--select--</option>
        <option value="1" >TEST</option>
        <option value="2">RUN</option>
    </select>
    <input type="text" name="run"/>
</body>
</html>

定义:我有下拉列表,它有四个值。如果我在下拉列表中将一个值更改为另一个值,则会自动选择文本框。根据我的代码,它工作正常。

但问题是当我在下拉列表中选择第一个值时,autotab正在工作,我再次从下拉列表中选择相同的值(autotab不工作)。我知道这个问题就在于此。没有变化,所以事件不会发生。请帮我纠正这个问题。

javascript jsp
4个回答
0
投票

没有id为run的元素,它被引用:

document.getElementById("run");

你可能打算写:

<input type="text" name="run" id="run"/>

0
投票

使用onBlur()而不是onchange()

当您离开某个对象而不必更改其值时,会触发onBlur事件。

仅当您更改了字段的值时才会调用onChange事件。

请了解一下qazxsw poi


0
投票

尝试使用eventsmouseup事件作为解决方法:

keyup
var current = document.getElementById("test");
var next = document.getElementById("run");
var open = false; //drop-down closed

var watchOpen = function() {
  open = !open; //inverse flag to identify state of drop-down
};

var tab = function() {
  if (!open && current.value !== "-1") {
    next.focus();
  }
};

0
投票

尝试使用<select id="test" onmouseup="watchOpen();tab();" onkeyup="watchOpen();tab();"> <option value="-1">--select--</option> <option value="1">TEST</option> <option value="2">RUN</option> </select> <input type="text" id="run" /><!-- replaced name with id -->。它将解决问题

我认为这可以用html5

onBlur()
© www.soinside.com 2019 - 2024. All rights reserved.