https://jsfiddle.net/5f19mz0y/21/
Я искал способ предотвратить выход фокусировки из поля ввода при нажатии клавиши табуляции. Затем я нашел несколько способов использовать preventDefault()
для события onkeydown. Итак, поскольку возвращение false имеет одинаковый эффект использования preventDefault()
и stopPropagtion()
, я подумал, что вместо этого можно использовать return false
, чтобы сделать то же самое, но после тестирования выясняется, что это не работает таким образом ,
<script>
function tab( event ) {
if ( event.keyCode === 9)
{
event.preventDefault(); //- focus doesn't change
}
}
</script>
<input onkeydown="tab(event);">
Приведенный выше код работал как положено; при нажатии клавиши табуляции фокус не меняется.
<script>
function tab( event ) {
if ( event.keyCode === 9)
{
return false; //- focus changes
}
}
</script>
<input onkeydown="tab(event);">
Для приведенного выше кода фокус изменяется при нажатии клавиши табуляции
Может ли кто-нибудь объяснить мне причину этого?
Добавлена
<script>
function tab( event ) {
if ( event.keyCode === 9)
{
event.preventDefault();
event.stopPropagation();//- focus not changes
}
}
</script>
<input onkeydown="tab(event);">
Учитывая случай, когда stopPropagation()
в return false
повлиял на результат, как и выше, я также протестировал и с preventDefault()
и с stopPropagation()
. Тем не менее, это также отлично работает, как тот, который только preventDefault()
; результат отличается от полученного от return false
. Таким образом, кажется, что в return false
есть что-то большее, чем preventDefault()
и stopPropagation()