前提
rails6を使用し、アプリを作成しています。
フォームを使い、ユーザからの入力をDBに保存する機能を作成しました(new.html.erb
)。フォーム内にWEBページのURLを入力してもらうフォーム領域(f.label :url
の部分です)があるのですが、初めて見た方にも利用しやすいように、URLの例を記載し、それをボタンひとつでコピーし貼り付けられるようにすることで、フォームへの入力をスムーズに行えるようにしたいです。
知りたいこと
フォーム内に作成したクリップボードへのコピーボタン
を用意しクリックしても、HTTPリクエストが発行されない方法が知りたいです。
疑問点
以下のソースでは、ボタンをクリックすることでクリップボードに値をコピーする機能
の実現に成功したのですが、ここで1つ大きな問題が発生しました。クリップボードへのコピーがボタンであり、HTTPメソッドと認識されるため、フォームが不完全である場合に、コピー
ボタンを押すと、Postコントローラーに記載したcreateアクションが呼ばれてしまい、エラーが発生します。
私はクリップボードへのコピーを行いたいだけなので、クリップボードへのコピーを押しただけで、HTTPリクエストが発行されるのは、困ります。
- new.html.erb
erb
1<%= form_for(@post) do |f| %> 2<%= render "shared/error_messages_posts" %> 3 4<div class="form-group"> 5 <%= f.label :content, "content" %> 6 <p><%= f.text_field :content, class: "form-control" %></p> 7</div> 8 9<div class="form-group"> 10<%= f.label :url, "URL" %> 11<%= f.text_field :youtube_url, class: "form-control" %> 12</div> 13 14<!-- コピー対象要素とコピーボタン --> 15<input id="copyTarget" type="text" style="width:100%; box-sizing:border-box" value="https://www.example.com" readonly> 16<button onclick="copyToClipboard()">コピー</button> 17 18<!-- bodyタグ内の下部に以下を入力する --> 19<script> 20function copyToClipboard() { 21// コピー対象をJavaScript上で変数として定義する 22var copyTarget = document.getElementById("copyTarget"); 23 24// コピー対象のテキストを選択する 25copyTarget.select(); 26 27// 選択しているテキストをクリップボードにコピーする 28document.execCommand("Copy"); 29 30} 31</script> 32 33<div class="form-group"> 34<p><%= f.submit "作成完了", class: "btn btn-primary" %></p> 35</div> 36<% end %> 37 38</div> 39</div> 40</div>
- schema.rb
create_table "posts", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.text "content" t.text "url" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end
バージョン情報
- Rails 6.0.2.2
- Ruby 6.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/16 02:55