Форма Vue @submit.prevent не работает в мобильных браузерах

У меня есть компонент Vue 3 (среда Nuxt 3) с простой формой, которую я пытаюсь предотвратить по умолчанию при перезагрузке страницы. Как и много раз в других проектах Vue, я использую @submit.prevent для элемента формы, который работает, как и ожидалось, на рабочем столе. Однако, к моему большому удивлению, это не работает ни в iOS (Safari/Chrome), ни в Android (Chrome). На мобильном устройстве при нажатии кнопки или нажатии «Ввод/возврат» страница перезагружается. Я пробовал все, например, пытался вручную вызвать event.preventDefault() и вызвать @submit.prevent.stop, но безуспешно.

Ниже приведен код компонента:

<template>
  <div class = "login">
    <h1>Log in</h1>

    <form class = "login-form" @submit.prevent = "login()" id = "form">
      <label for = "email">Email</label>
      <input type = "email" name = "email" id = "email" v-model = "email" />
      <label for = "password">Password</label>
      <input type = "password" name = "password" id = "password" v-model = "password" />

      <button type = "submit" id = "submit">Log in</button>
    </form>
  </div>
</template>

<script setup lang = "ts">
const email = ref("");
const password = ref("");

async function login() {
  // Login logic
}
</script>

<style lang = "scss" scoped>
</style>

Если кто-то что-то знает по этому поводу, поделитесь, заранее спасибо.

Могу я спросить, как вы тестируете его на мобильном телефоне? Я сделал тест, и он работает нормально.

ReaganM 10.05.2023 19:53

@ReaganM Я использую Vite с npm run nuxt dev и IP-адресом локальной сети на порту 3000, в моем случае 192.168.1.190:3000. Проект немного больше, чем этот компонент, но я не думаю, что это должно как-то повлиять на это. Хотя я могу ошибаться, но я понятия не имею, где искать.

Rasmus Lian 10.05.2023 22:25

Я сделал то же самое с ios chrome, и он отлично работает для меня :)

ReaganM 11.05.2023 00:53

@ReaganM Да, для меня это действительно странно. Я действительно не знаю, где отлаживать дальше

Rasmus Lian 11.05.2023 07:27

@RasmusLian быстрая демонстрация. работает на iOS 16. повезло? play.vuejs.org/#eNp1Ustu4zAM/BVCKNAE2cTpdVcxtscC/…

jjj 11.05.2023 16:44

@jjj Эта демонстрация работает, как и ожидалось, без перезагрузки страницы

Rasmus Lian 14.05.2023 15:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
149
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте stop для stopPropergation.

Если обнаружите, что делаю @submit.prevent.stop = "" в некоторых случаях.

Я не уверен, почему preventDefault в некоторых случаях недостаточно.

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

Да, я пробовал это, к сожалению, без везения.

Rasmus Lian 14.05.2023 15:37

Если пакет вашего приложения большой, убедитесь, что страница полностью загрузилась, прежде чем пытаться нажать кнопку входа. Я могу воспроизвести вашу проблему, пока JavaScript все еще загружается, потому что @submit.prevent не оценивается до тех пор, пока JavaScript не завершит загрузку и выполнение. Но как только страница полностью загружается, поведение HTML по умолчанию переопределяется.

Возможно, поэтому вы не можете воспроизвести проблему с демонстрацией игровой площадки jjj, и другие также не могут воспроизвести вашу проблему.

Спасибо за это предложение, однако в моей ситуации это не так. Я пробовал ждать и все тот же результат.

Rasmus Lian 17.05.2023 09:58

Попробуйте подключить отладчик, чтобы вы могли увидеть консоль, если какая-либо ошибка JavaScript developer.chrome.com/docs/devtools/remote-debugging @RasmusLian

asdofindia 17.05.2023 10:15

Отличный совет! Это помогло мне найти мою проблему, это было связано с ошибкой при извлечении данных из моей базы данных на локальном хосте, необходимо было изменить локальный хост на 192.168.1.190, чтобы он извлекался оттуда, а не на локальный хост телефона!

Rasmus Lian 17.05.2023 16:57
Ответ принят как подходящий

Обновление: моя проблема решена из-за ошибки связи с сервером базы данных. Он попытался получить это на локальном хосте по телефону, но вместо этого должен был быть адрес 192.168.1.190. Будущие люди, читающие это, постарайтесь выяснить, не вызывают ли какие-либо ошибки эту проблему, спасибо @asdofindia за подсказку!

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

tao 17.05.2023 18:47

Другие вопросы по теме