質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

4326閲覧

railsアプリでフォーム画面の中に、コピーボタンを用意したい

T.Adams

総合スコア40

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2020/05/15 14:56

編集2020/05/15 23:49

前提

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のように button から input に変えても同様でしょうか?

html

1<input type="button" value="コピー" onclick="copyToClipboard()">

投稿2020/05/15 15:53

Yasumichi

総合スコア1773

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

T.Adams

2020/05/16 02:55

大変助かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問