0
0

More than 1 year has passed since last update.

【rails】フォームに自動入力

Last updated at Posted at 2023-03-24

jsでフォームに自動入力する

前回の続き

  • jqueryの導入していない
  • bootstrapの導入していない
  • ruby ver 3.1
  • rails ver 6.1

javascriptファイルを用意

  • app/javascript/myscript.jsを作成
app/javascript/packs/aplication.js
:
:
@import "myscript"
:
:
myscript.js
//ターボリンクをloadしないと、うまく動かない
document.addEventListener('turbolinks:load', () => {

  // テキストボックスを取得
  const tagInput = document.querySelector('input[name="item[tag_name]"]');

  // タグをクリックした時の処理
  const tagLinks = document.querySelectorAll('.tag-link');
  tagLinks.forEach(link => {
    link.addEventListener('click', (e) => {
      // リンクのデフォルト動作を無効化
      e.preventDefault();
      // テキストボックスの内容にタグを追加
      const clickedTag = e.target.innerText.trim();
      if (tagInput.value) {
        tagInput.value = `${tagInput.value} ${clickedTag}`;
      } else {
        tagInput.value = clickedTag;
      }
    });
  });

    //フォーム内を空にする処理
   const clearButton = document.querySelector('#clear-button');
    // クリアボタンをクリックした時の処理
    clearButton.addEventListener('click', (e) => {
    // テキストボックスを空にする
    tagInput.value = '';
  });

});

addEventListener
クリックされた時に実行される。
引数の e はクリックされた要素に関する情報が格納される Event オブジェクト
e.preventDefaul
クリックしたタグのデフォルトの動作(ページを遷移させること)をキャンセルする

e.target.innerText.trim()
イベントが発生した要素の、テキストを取得し、trim()で前後の空白を除いた文字列を扱う

部分テンプレート化

tags/add_tag.html.erb
       
<% tag_list.each do |tag| %>
  <div><%#= tag_list.tag_name + " " %>

  <%= link_to tag.tag_name, '#', class: 'tag-link' %>
  </div>
<% end %>

投稿ページに貼り付ける。

new.html.erb

:
:
:
<button id="clear-button" type="button">クリア</button>



<p>タグをクリックすると、フォームに自動で追加されます</p>
<div>
  <%= render "tags/add_tag", tag_list: @tag_list %>
</div>

同じく、editにも貼り付ける

終わり

端折ったので、もしかしたらうまく動かない場合がありますがご了承ください。

js難しすぎる!!!
イベントリスナーやプロパティが覚えられないよう。
GPT先生に教わりながら実装したけど、理解が追いつかない。

とりあえず、タグの試作は終わったので、ポートフォリオ用のECサイト制作に取り掛かります。

0
0
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
0
0