2017-02-03 7 views
0

Моя проблема: мне нужно сосредоточиться на следующем текстовом вводе, после чего вставляется символ. Этот ввод может содержать только один символ, в частности номер.Изменение фокуса на введенное значение

Мое решение (псевдо-код):

onKeyUp="nextInput.focus()" 

... хорошо работает на рабочем столе, но на мобильном телефоне, иногда значение записывается после перемещения на следующих областях (в том ячейке).

Мой второй раствор:

onChange="nextInput.focus()" 

не работает, потому что OnChange событие вызывается только тогда, когда элемент HTML потерял фокус.

ответ

1

Кажется, работает в моем сафари, Iphone:

$("#first").on('keyup', function(e){ 
    if(isCharacterKeyPress(e)){ 
    $("#second").focus(); 
     console.log(e); 
    } 
}); 

function isCharacterKeyPress(evt) { 
    if (typeof evt.which == "undefined") { 
     // This is IE, which only fires keypress events for printable keys 
     return true; 
    } else if (typeof evt.which == "number" && evt.which > 0) { 
     // In other browsers except old versions of WebKit, evt.which is 
     // only greater than zero if the keypress is a printable key. 
     // We need to filter out backspace and ctrl/alt/meta key combinations 
     return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which != 8; 
    } 
    return false; 
} 

Пожалуйста, Проверьте это: https://jsfiddle.net/9u9hb839/4/

Редакцией:

для того, чтобы предотвратить, чтобы обнаружить другие клавиши нажимать, а не char, я обновил свой код:

var keypressed = false; 

$("#first").on('keyup', function(e){ 
    console.log('keyup'); 
    if(keypressed){ 
    $("#second").focus(); 
    } 
    keypressed = false; 
}); 

$("#first").on('keypress', function(e){ 
    console.log('keypress'); 
    keypressed = isCharacterKeyPress(e); 
}); 

function isCharacterKeyPress(evt) { 
    if (typeof evt.which == "undefined") { 
     // This is IE, which only fires keypress events for printable keys 
     return true; 
    } else if (typeof evt.which == "number" && evt.which > 0) { 
     // In other browsers except old versions of WebKit, evt.which is 
     // only greater than zero if the keypress is a printable key. 
     // We need to filter out backspace and ctrl/alt/meta key combinations 
     return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which != 8; 
    } 
    return false; 
} 

Попробуйте это: https://jsfiddle.net/9u9hb839/9/

Испытано в мобильном (Safari, Chrome) и настольный (Chrome, Firefox)

+0

HTTPS: //jsfiddle.net/9u9hb839/9/ не работает в Chrome Android –

0

Единственное решение, которое я нашел, что работает также в мобильной среде:

function moveFocus(evt, id) { 
     setTimeout(function() { 
      document.getElementById(id).focus(); 
      document.getElementById(id).select(); 
     }, 100); 
}