
HTMLで、ボタンとテキストボックスのペアが複数あり、ボタンを押すと隣にあるテキストボックスの値をクリップボードにコピーし、コピーした文字列を選択状態にした後で「コピー完了」とのアラートを出するjavascriptをChatGPTで生成してもらいましたが、以下のサンプルですと、テキストの選択状態が外れてしまいます。
formタグをを外すと意図したように動くのですが・・。
<form method="post" action="">
(注:本番環境では、action内は、<?php $_SERVER['PHP_SELF'] ?>となってます)
なお、MS Edgeでだけ動作すれば十分です。些細な修正で直らないものでしょうか?
<html>
<head>
<script>
function copyToClipboard(inputId) {
// テキストボックスの値を取得
var input = document.getElementById(inputId);
var text = input.value;
// テキストをクリップボードにコピー
navigator.clipboard.writeText(text)
.then(function() {
// コピー完了時の処理
input.select();
alert("コピー完了");
})
.catch(function(error) {
// エラーハンドリング
console.error("クリップボードへのコピーに失敗しました: ", error);
});
}
</script>
</head>
<body>
<form method="post" action="">
<input size="30" type="text" id="input0" value="テスト文字列000"><button onclick="copyToClipboard('input0')">コピー</button><br>
<input size="30" type="text" id="input1" value="テスト文字列111"><button onclick="copyToClipboard('input1')">コピー</button><br>
<input size="30" type="text" id="input2" value="テスト文字列222"><button onclick="copyToClipboard('input2')">コピー</button>
</form>
</body>
</html>
No.1ベストアンサー
- 回答日時:
こんばんは
>formタグをを外すと意図したように動くのですが・・。
ボタンクリックでフォームがサブミットされているせいだと思われます。
見てもわからないかも知れませんが、同じページに遷移しているので初期状態に戻っているのだと推測します。
良く見ると、インプット要素が一瞬だけ選択状態になるのが見えると思います。
対応として考えられそうなのは・・
1)ボタン要素に属性として type="button" を明示し、サブミットを防止する。
ボタン要素のデフォルトは type="submit"ですので。
(現状のままで、ご希望の動作になると思います)
https://developer.mozilla.org/ja/docs/Web/HTML/E …
2)ボタン要素ではなく、普通のインライン要素をボタンの様に見せて表示する
(現状のままで、ご希望のようになると思います)
3)ボタンを押された際に、スクリプト側でイベントの伝搬を中止しサブミットを防止する。
event.preventDefault(); の1行を追加すれば良いです。
https://developer.mozilla.org/ja/docs/Web/API/Ev …
ただし、現状のままだと eventオブジェクトを取得できませんので、HTMLも
変える必要がありあります。
onclick属性で設定する場合には、呼び出し側を、
copyToClipboard(event, 'input0')"
などとしておき、受け取り側も
function copyToClipboard(event, inputId) { ~~
のようにして、受け渡す必要があります。
onclickにイベント処理を記述すると、繰り返しが多くHTMLが煩雑になるので、イベントをまとめて上位要素に設定しておくという方法も考えられます。
また、スクリプトからaddEventListenerメソッドでイベントを設定すると、コールバックの第一引数にeventが渡される仕様になっていますので、eventオブジェクトを受け渡す必要もなくなります。
https://developer.mozilla.org/ja/docs/Web/API/Ev …
早速ご回答ありがとうございました。ボタン要素のデフォルトは type="submit"というのを存じ上げず、結論的には1)の方法で解決しました。
>良く見ると、インプット要素が一瞬だけ選択状態になる
そうなんです、ここがポイントかなーとは思っていました。
他にも実にいろいろ解決策があるものですね。保存させていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ボタンに任意の動作をさせてテ...
-
blurイベントについて
-
perl cgi文字化け解消方法と[1...
-
checkboxをshiftキーを押しなが...
-
javascriptについての質問です...
-
ユーザー入力値の正誤判定をブ...
-
<input type="text" name="Q1">...
-
ページ間で変数を保持したい
-
HTMLタグの生成について
-
TextBoxに半角数字以外を入れた...
-
tabindexの取得
-
テキストボックスのフォーカス移動
-
jQueryのdatepickerの日付が選...
-
マイナスなら赤字で表示したい...
-
【Javascript】(テキストボッ...
-
スクロールの中の文章を日ごと...
-
return trueとreturn falseの用...
-
HTMLの表示内容にfor文を使...
-
Selectボックスの幅を自動で広...
-
JavaScriptのfileオブジェクト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ページ間で変数を保持したい
-
マイナスなら赤字で表示したい...
-
TextBoxに半角数字以外を入れた...
-
tabindexの取得
-
HTMLファイル同士での値渡し
-
【Javascript】(テキストボッ...
-
プルダウンで選択された値を別...
-
テキストボックスに入力した色...
-
SHIFT + TABキーの...
-
VBScriptでpingを実行(ブラウザ...
-
一部Enter無効化の方法を教えて...
-
クリック→フォーカスのある場所...
-
クッキーによる複数のデータ取得
-
JSPでonChangeを強制発行するに...
-
Request.Form(key)の中身をクリ...
-
フォーカスが外れた時の入力チ...
-
選択したたラジオボタンの値をS...
-
GetElementByIdがうまく取得で...
-
テキストボックスの値が変更に...
-
JSで一つのボタンを押したとき...
おすすめ情報