Почему не имитирует нажатие клавиши табуляции, чтобы перейти к следующему полю ввода?

Обратите внимание на этот вопрос. Я вижу, что есть другие подходы, помимо просто запуска события нажатия клавиши табуляции, но мне все же хотелось бы знать, почему запуск события нажатия клавиши табуляции не перемещает фокус в следующее поле ввода.

Code Pen

HTML

<textarea></textarea>
<textarea></textarea>
<textarea></textarea>

JS

$('textarea').on('keydown', function(e) {
  if (e.metaKey && e.which === 40) {
    console.log('test');
    $(this).trigger({
      type: 'keypress',
      which: 9
    });
  }
});

Ответ 1

Поскольку событие табуляции является собственным событием/действием браузера для изменения фокуса. Функция .trigger() запускает только обработчики событий, назначенные ей. Обратите внимание, что имеется больше информации, приведенной в jQuery сайте:

Функция .trigger() не может использоваться для имитации событий в собственном браузере, таких как щелчок на поле ввода файла или якорный тег. Это связано с тем, что обработчик событий не связан с системой событий jQuery, которая соответствует этим событиям.

Для этого есть плагин для этого, но называемый jquery-simulate. При этом клавиша смены ключа tab фактически является действием по умолчанию в веб-браузере. Увольнение собственного события браузеров не означает, что оно выполнит это действие по умолчанию, поскольку в документации для KeyboardEvents упоминается:

Обратите внимание, что при ручной смене события не генерируется действие по умолчанию, связанное с этим событием. Например, ручное срабатывание ключевого события не вызывает появления буквы в сфокусированном текстовом вводе. В случае событий пользовательского интерфейса это важно по соображениям безопасности, поскольку оно не позволяет сценариям моделировать действия пользователя, которые взаимодействуют с самим браузером.