Squeak.ru - шаблоны программирования

Rails выбирает опцию «Другое», создавая текстовое поле

Учитывая стандартный код выбора:

<%= f.select :type_name, [['Genomics','Genomics'],['Proteomics','Proteomics'],['Transcriptomics','Transcriptomics'],['Other','Other'] %>

Может кто-нибудь объяснить, как мне создать текстовое поле, когда выбрано «Другое»? Так что type_name может быть чем-то отличным от опций в select?

Я понимаю, что это простой вопрос, но я еще не нашел краткого ответа!


Ответы:


1

Есть много способов сделать это, но все они требуют JavaScript. Общий подход, который мне нравится, заключается в том, чтобы поместить в форму скрытое текстовое поле, а затем прикрепить обработчик событий JavaScript к тегу select, который показывает поле, когда выбран вариант «Другое».

Вот суть скрипта, который я обычно использую для этого. Он обрабатывает привязку JavaScript, используя атрибуты данных. Добавьте скрипт в свои активы, затем поместите что-то вроде этого в форму:

<%= f.select :type_name, [['Genomics','Genomics'],['Proteomics','Proteomics'],['Transcriptomics','Transcriptomics'],['Other','Other'] %>
<%= f.text_field :type_name_other, "data-depends-on" => "#object_type_name", "data-depends-on-value" => "Other" %>

где #object_type_name – это HTML-идентификатор раскрывающегося списка.

22.05.2014
  • Итак, я считаю, что выяснил HTML-идентификатор Rails, и я получил его, поэтому текстовое поле скрыто, когда я открываю форму. Однако, когда я нажимаю другое, оно не появляется! Идентификатор просто: ...['Other','Other']], {}, :id => "name_of_id", правильно? 22.05.2014
  • Можете ли вы опубликовать сгенерированный html? 22.05.2014
  • На странице используется гем nested_form, и рассматриваемый дропбокс начинается со строки 126. 22.05.2014
  • HTML выглядит правильно, но я не знаком с используемой вами структурой. Вам нужно будет найти способ связать обработчик событий Javascript после того, как ваш шаблон будет преобразован в HTML. Может быть, он запускает пользовательское событие? 22.05.2014
  • Рассматриваемый драгоценный камень - это nested_form, я заметил, что в нем есть раздел, посвященный событиям Javascript, я должен смотреть на что? 22.05.2014
  • Ага. Похоже, вам нужно вложенное: fieldAdded. 22.05.2014
  • Или вдобавок тоже, да. 22.05.2014
  • Ок круто, новая проблема! Сервер выплевывает: Started GET "/javascripts/depends_on.js" Когда мой depend_on.js находится в активах/javacripts/ есть идеи? 22.05.2014
  • Это не выглядит знакомым, нет. Извините :-) 22.05.2014
  • Исправлено, все равно не получается сменить на $(document).on('nested:fieldAdded Боюсь! Ну ладно, я буду продолжать затыкаться. Спасибо за вашу помощь! 22.05.2014

  • 2

    Вам нужно создать attr_accessor в модели, к которой прикреплен f (например, type_name_other), добавить text_field в форму ниже выбора для type_name_other в div, который изначально скрыт (в CSS: display:none), затем создайте прослушиватель javascript который определяет, когда форма выбора изменилась, и если выбранный ответ «другой», покажите скрытое поле, иначе скройте его. Затем вам нужно будет увидеть, имеет ли type_name_other значение при обработке формы, и использовать его, если это так.

    22.05.2014
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...