возвращение ложного JavaScript против предотвращения изменения фокуса по умолчанию - PullRequest
0 голосов
/ 27 июня 2018

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()

1 Ответ

0 голосов
/ 27 июня 2018

Returning false из обработчиков событий Javascript эквивалентно вызову обоих, e.preventDefault и e.stopPropagation.

Таким образом, разница в том, что preventDefault будет предотвращать только действие события по умолчанию, то есть перенаправление страницы при щелчке по ссылке, отправке формы и т. Д., А return false также будет останавливать поток событий

Подробнее см. Здесь

...