Как предотвратить ввод ключа ввода в рельсы

Простой пример:

 <%= form_for :post, url: posts_path  do |f|%>
    <p>
        <%= f.label :title%><br/>
        <%= f.text_field :title%>
    </p>
    <p>
        <%= f.label :text%><br/>
        <%= f.text_area :text%>
    </p>
    <p>
        <%= f.submit%>
    </p>
<%end%>

Я думаю, что это обработка событий по умолчанию Rails. Здесь, если пользователь нажимает клавишу ввода, он отправляет params.

Но в моем случае я должен использовать ключ ввода для другого события.

Мне нужно искать users с другим полем ввода, нажав клавишу ввода.

Но если я использую form_for, он отправляет форму.: (

Как я могу предотвратить отправку с помощью клавиши ввода в rails?

Нужно ли использовать простые теги html? Как <form> tag и <submit> button?

Любые хорошие решения?

Ответ 1

Ввод ключа ввода - это не проблема рельсов, а проблема HTML/JS

Rails - это бэкэнд (живет на сервере); HTML/JS на стороне клиента (в реальном времени в браузере) - они определяют, какие функции включены/отключены

Я бы обошел вашу проблему так:

$('form').on('keypress', e => {
    if (e.keyCode == 13) {
        return false;
    }
});

А если вы используете Turbolinks:

$(document).on('turbolinks:load', () => {
    $('form').on('keypress', e => {
        if (e.keyCode == 13) {
            return false;
        }
    });
});

Полезная ссылка: Как предотвратить нажатие клавиши ВВОД при отправке веб-формы?

Ответ 2

Это не конкретный вопрос Rails, поскольку он является естественным поведением всех браузеров. Если у вас есть кнопка отправки в вашу форму (и вы должны:)), то каждый браузер отправит форму после входа в нее. * Я не проверял, но даже без четкой кнопки отправки он должен это сделать] Принятый ответ правильный, но поскольку есть поток, который дает более сложный пример, я бы тоже прошел через него:

Запретить пользователям отправлять форму, нажав Enter