Как заставить событие JS onpaste работать с формой Rails?

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

Вот моя форма:

<h1 class = "CustomerTitle">Search Tool</h1>
<%= form_with url: "/support/search_res", class: "form", method: :get do |form| %>
  <%= form.text_field :query, class: "input", placeholder: "Search for a user..." %>
  <%= form.submit "Search", class: "submit_button", id: "pasteSubmit", onpaste: 'pasteAndGo()' %>
<% end %>

<script>
  function pasteAndGo() { 
    document.getElementById('pasteSubmit').submit(); 
  }
</script>

Может ли кто-нибудь сказать мне, почему это не работает?

Обновлено: я пробовал подход Серкана Тирнавали:

<h1 class = "CustomerTitle">Revuto Customer Support Tool</h1>
<%= form_with url: "/support/search_res", class: "form", onpaste: 'pasteAndGo()', method: :get do |form| %>
  <%= form.text_field :query, class: "input", placeholder: "Search for a user..." %>
  <%= form.submit "Search", class: "submit_button" %>
<% end %>

<script>
  function pasteAndGo() { 
    document.getElementsByClassName('form')[0].submit(); 
  }
</script>

без прогресса. Любые другие идеи/решения приветствуются.

Поведение ключевого слова "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
0
35
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны выбрать форму и отправить ее, а не кнопку.

<script>
  function pasteAndGo() { 
    document.getElementsByClassName('form')[0].submit(); 
  }
</script>

Также вы можете использовать эту библиотеку js для функциональности этого типа https://select2.org/data-sources/ajax

К сожалению, это не работает. По крайней мере, на этот раз я не получаю никаких ошибок в консоли. Тем не менее спасибо за ваш ответ.

Mislav Rukonic 20.03.2022 22:43

Следует ли использовать submit или requestSubmit?

BenKoshy 20.03.2022 23:37

requestSubmit тоже не помогает.

Mislav Rukonic 20.03.2022 23:49
Ответ принят как подходящий

Я считаю, что у вас есть onpaste не в том месте. Пожалуйста, попробуйте это:

<h1 class = "CustomerTitle">Revuto Customer Support Tool</h1>
<%= form_with url: "/support/search_res", class: "form", method: :get do |form| %>
  <%= form.text_field :query, class: "input", placeholder: "Search for a user...", onpaste: 'pasteAndGo()' %>
  <%= form.submit "Search", class: "submit_button" %>
<% end %>

<script>
  function pasteAndGo() { 
    document.getElementsByClassName('form')[0].submit(); 
  }
</script>

Это определенно помогло. это работает сейчас. Однако он не принимает информацию текстового поля. Это всегда "пустая" паста. Сейчас это может сводиться к самой функции JS.

Mislav Rukonic 21.03.2022 16:24

@MislavRukonic, пожалуйста, обратитесь к этому другому вопросу: stackoverflow.com/a/10972973/587518 кажется, что событие onpaste запускается до того, как значение поля получает вставленное значение.

Gonzalo Robaina 21.03.2022 21:30

Спасибо за ответ. Я проверил этот пост, и кажется, что это было именно то, что я искал. Ваше здоровье!

Mislav Rukonic 21.03.2022 22:33

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