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

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

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

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

JavaScript

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

Q&A

1回答

5126閲覧

【JS】クリック1回目のイベントだけ発生しない【Clipboard.js】

hassan2019

総合スコア15

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

JavaScript

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

0グッド

0クリップ

投稿2020/07/16 00:23

1回目のクリックの際にコピーもツールチップ表示もできないのですが、2回目以降だと出来ます。
原因が分かりません。
copyUrl自体は1回目でも呼ばれています。

Haml

1%span.clip.clipboard{:onclick => "cpyUrl(this)", ':data-clipboard-text' => "user.url"}

JavaScriptInHaml

1:javascript 2 function cpyUrl(select) { 3 var form; 4 form = new Form; 5 form.hideFieldset() 6 clipboard = new Clipboard(select) 7 clipboard.on('success', function(e) { // ここがクリック1回目だと動作しない 8 return form.showTooltip($(e.trigger), 'copied!'); 9 }); 10 $('.clipboard').on('mouseleave', function() { 11 $(this).attr('class', 'clip clipboard'); 12 return $(this).removeAttr('aria-label'); 13 }); 14 form.updateChildrenSelectOptions($('.select-parent')) 15 }

もし何かお分かりの方、いらっしゃいましたら教えて頂けますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

copyUrl自体は1回目でも呼ばれています。

copyUrl自体がコピーやツールチップ表示を実行するわけではなく、new Clipboardされたオブジェクトがそれらの仕事を行っています。

なので、1回目のクリックでは「イベントのセット」だけが行われて、2回目以降でようやく反応します。

copyUrlの中身はクリックのタイミングではなく、事前に実行しておくのが適切です。

投稿2020/07/16 00:30

maisumakun

総合スコア145184

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

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

hassan2019

2020/07/16 00:43 編集

ご回答ありがとうございます。 今回 ``` %span.clip.clipboard{:onclick => "cpyUrl(this)", ':data-clipboard-text' => "user.url"} ``` の部分は、実は動的に生成され、複数存在するDOMになります。(user.urlが全て異なってくる) >copyUrlの中身はクリックのタイミングではなく、事前に実行しておくのが適切です。 とのことでしたので、:onclickを:onloadや:onreadyに変えてみましたが、何も反応しなくなりました。 どのようにコーディングすべきでしょうか? 教えて頂けますと、大変ありがたいです。
maisumakun

2020/07/16 00:47

> どのようにコーディングすべきでしょうか? $(function(){})でページロード時に実行するようにして、その中で$('[data-clipboard-text]').eachのようにして対象のエレメントを拾って1つずつnew Clipboardを実行していきましょう。
hassan2019

2020/07/17 05:49

ご回答いただきありがとうございました。 その方針でやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問