2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails + jQueryでフォームのチェックボックスで項目の表示/非表示を制御する

Last updated at Posted at 2020-04-28

はじめに

jQueryを使って、フォーム上に配置したチェックボックスで、フォーム上の項目(メソッド)の表示、非表示の切り替えを行えるようにする。

環境

  • Vagrant + Ubuntu 16.04.5 LTS
  • Rails 5.2.4.2
  • slim
  • jQuery
  • Bootstrap4

やり方

Viewに、このように記述する。
チェックボックス、ラジオボタンの類は、form-groupでも囲んでもエラーにはならないが、基本、checkboxで囲む。横並びにしたい場合はrowを付ける。

index.html.slim
.checkbox.row
        .col-sm-2
            = f.label :motouke, '区分', class: 'control-label'
        .col-sm-1
            = f.label :motouke, '自治体', class: 'control-label'
            = f.radio_button :motouke, 1, checked: true, id: 'motouke_kbn_1'
        .col-sm-1
            = f.label :motouke, '民間', class: 'control-label'
            = f.radio_button :motouke, 2, id: 'motouke_kbn_2'

セレクト項目で空白選択を許す場合は、**{include_blank: true}**をつけます。

index.html.slim
.form-group.row
    .col-sm-2
        = f.label '都道府県', class: 'control-label'
    .col-sm-8
        = f.select 'j', options_for_select(['北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県']), 
            		{include_blank: true}, 
                     class: 'selectpicker form-control', id: 'task_idx_j_sel'
    .col-sm-2
        = link_to '自治体検索', class: 'btn btn-outline-primary', id: 'task_idx_j_lnk'

jsファイルを作って、このように記述する。ラジオボタンが押されたイベントは、changeで拾う。項目を非表示にする場合は、prop('disabled', false)、表示にする場合は、**prop('disabled', true)**となる。**fadeIn()**にすると、フェードインのように、徐々に表れてくる。また、**fadeOut()にすると、フェードアウトのように、徐々に消えていくようになる。少し見栄えをお洒落にしたい場合は使える。
因みに、
$("#task_idx_j_sel").attr('readonly', true);**を採用すると、項目が灰色にはなるが、カーソル移動できてしまうため、これはちと使えません。あしからず。

app/javascripts/taskas_index.js
// 団体で自治体が選択された時
$(function() {
    $('input[id="motouke_kbn_1"]').change(function() {

        //選択したvalue値を変数に格納
        var val = $(this).val();
        if (val == 1) {
            // 入力可にする
            $("#task_idx_j_sel").prop('disabled', false);
            $("#task_idx_j_lnk").fadeIn();
        }
    });
});

見た目の動きはこんな感じ。自治体にチェックを付けると、セレクト項目が入力可で、ボタンも押下可です。

image.png

image.png

app/javascripts/taskas_index.js
// 団体で民間が選択された時
$(function(){
    $('input[id="motouke_kbn_2"]').change(function() {

        var val = $(this).val();
        if (val == 2) {
            // 入力不可にする
            $("#task_idx_j_sel").prop('disabled', true);
            $("#task_idx_j_lnk").fadeOut();
        }
    })
})

見た目の動きはこんな感じ。民間にチェックを付けると、セレクト項目が入力不可になり、ボタンが非表示になります。

image.png

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?