Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 值更改后如何跳转到下一个下拉列表?_Javascript_Html_Select_Onchange_Onkeydown - Fatal编程技术网

Javascript 值更改后如何跳转到下一个下拉列表?

Javascript 值更改后如何跳转到下一个下拉列表?,javascript,html,select,onchange,onkeydown,Javascript,Html,Select,Onchange,Onkeydown,假设我一行有大约20个下拉列表,希望在用键盘更改值后自动跳转到下一个。如何做到这一点? 我发现onchange事件只有在下拉菜单失去焦点时才会触发(比如onblur)。因此,我尝试了onkeydown,但这似乎非常不稳定和有问题 这就是我所尝试的: <script> function keydown(dd, e) { console.log(dd.value) jumptonext(dd); } function getNext(current) { var

假设我一行有大约20个下拉列表,希望在用键盘更改值后自动跳转到下一个。如何做到这一点? 我发现onchange事件只有在下拉菜单失去焦点时才会触发(比如onblur)。因此,我尝试了onkeydown,但这似乎非常不稳定和有问题

这就是我所尝试的:

<script>
function keydown(dd, e) {
    console.log(dd.value)
    jumptonext(dd);
}
function getNext(current) {
    var all = document.querySelectorAll('select[onkeydown]');
    for (var i = 0; i < all.length; i++) {
        if (all[i] == current && all[i+1]) return all[i+1];
    }
    return all[0];
}
function jumptonext(current) {
    var next = getNext(current);
    next.focus();
}
</script>
<select onkeydown="keydown(this, event)">
    <option></option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

<select onkeydown="keydown(this, event)">
    <option></option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

<select onkeydown="keydown(this, event)">
    <option></option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

<select onkeydown="keydown(this, event)">
    <option></option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

功能键控(dd,e){
console.log(dd.value)
jumptonext(dd);
}
函数getNext(当前){
var all=document.querySelectorAll('select[onkeydown]');
对于(变量i=0;i
但正如您在控制台日志中看到的,这些值是不正确的


有没有办法用键盘更改下拉列表的值,然后跳转到下一个下拉列表并执行相同的操作?

设置一些间隔函数,检查所有选择的当前值,例如10毫秒。如果其中一个的值已更改-查看是什么,并将焦点移动到下一个选择

// define array of current values
var values = new Array();

// here fill it with values of your selects

setInterval(function(){
  // here check if some value was changed
  // if there is one changed
    // set the new value into array as a current one
    // jump to next select with .focus()
},10);
我想这对你的老板来说已经足够了

也许您还需要对当前的一个进行.blur()处理(只是一个猜测)


很抱歉,但这似乎是唯一一种丑陋的方法。

您可以通过jquery处理它

我用它来按标签

}))


我认为这个代码没问题,你需要做一些修改

你为什么想要这个?如果我用的是键盘,那么我不希望它在我这样切换时跳转,因为我可以使用向下箭头在选项之间切换。当我完成后,我会按[Tab]进入下一个选项。因为我的老板正想这样做。我对这个决定不是很满意,但他想要这样,所以我不得不这样做——无论如何。好吧,试着向他解释一下功能的缺乏。如果没有,您是否尝试过键控?
$('body').on('keydown', 'input, select, textarea', function(e) {
var self = $(this)
  , form = self.parents('form:eq(0)')
  , focusable
  , next
  ;

$('.dropBpx').change(function(){

    focusable = form.find('input,a,select,button,textarea').filter(':visible');
    next = focusable.eq(focusable.index(this)+1);
    if (next.length) {
        next.focus();
    } else {
        form.submit();
    }
    return false;

});