ボタンを押下するとテキストフォームの値をクリップボードに送るJS
以下のテキストフォームの脇にあるボタンを押すと、「テキストフォームの値+.jpg」のをクリップボードにコピーするJSをご教示ください。
たとえば、一行目のボタンを押下すると、「鳩山.jpg」という文字列がクリップボードに送られるイメージです。
よろしくお願い致します。
<html>
<head>
<script>
//-->
</script>
</head>
<body>
<form action="xxxxx" method="post">
<table border="1">
<tr>
<td>1</td>
<td><input name="mytext[]" value="鳩山"></td>
<td><input type="button" name="Copy" value="コピー"></td>
</tr>
<tr>
<td>2</td>
<td><input name="mytext[]" value="小沢"></td>
<td><input type="button" name="Copy" value="コピー"></td>
</tr>
<tr>
<td>3</td>
<td><input name="mytext[]" value="平野"></td>
<td><input type="button" name="Copy" value="コピー"></td>
</tr>
<tr>
<td>4</td>
<td><input name="mytext[]" value="管"></td>
<td><input type="button" name="Copy" value="コピー"></td>
</tr>
</table>
</form>
</body>
</html>
No.5ベストアンサー
- 回答日時:
alert("クリップボードにコピーしました");の部分は、アラートでなく、文字列選択状態にしてコピーされたことを示したいのですが、
==>
target.select();とすると一応選択状態の表示になります。
alert("クリップボードにコピーしました");を
target.select();
if(confirm("クリップボードにコピーしました。\nペーストし終わりましたか?")==true){
target.blur();
target.nextSibling.focus();
}
にしてみましたが、やはりformじゃないので選択状態表示の解除は出来ませんね。
どこか別の場所をクリックすると解除されるのですが...
yyr446さん、何からなにまで本当にありがとうございます。
> target.select();とすると一応選択状態の表示になります。
おお、できました、できました。
これだけでも、達成感十分でしたが、
> if(confirm("クリップボードにコピーしました。\nペーストし終わりましたか?")==true){
ここまでできればもっといいですね。
> にしてみましたが、やはりformじゃないので選択状態表示の解除は出来ませんね。
いわれなかったら気にしなかったと思いますが、
ご指摘いただくと確かにきになります(^_^;
でも十分満足なものになりました。ありがとうございました。
No.4
- 回答日時:
例示いただいたHTMLとは、テーブルの列数が違うのが原因でしょうか?
=>はいそうです。
コピーしたいテキストボックスは、9列目の最初の子要素ですから
var target=table.rows[t.parentNode.parentNode.rowIndex].cells[8].firstChild;
となります。
汎用的に作るには、工夫がいりますね..
yyr446さん、たびたびご回答ありがとうございました。
>汎用的に作るには、工夫がいりますね..
とんでもないです、これで十二分に使い倒せます。大変助かりました。
今後とも何かと活用させていただきます。ありがとうございました。
No.3
- 回答日時:
IEだけでよいなら、INPUT要素を的確に選択出来れば、出来ます。
ご提示のtableの場合だと
<form action="xxxxx" method="post">
<table id="target_table" border="1">
<tr>
<td>1</td>
<td><input name="mytext[]" value="鳩山"></td>
<td><input type="button" name="Copy" value="コピー"></td>
</tr>
<tr>
<td>2</td>
<td><input name="mytext[]" value="小沢"></td>
<td><input type="button" name="Copy" value="コピー"></td>
</tr>
<tr>
<td>3</td>
<td><input name="mytext[]" value="平野"></td>
<td><input type="button" name="Copy" value="コピー"></td>
</tr>
<tr>
<td>4</td>
<td><input name="mytext[]" value="管"></td>
<td><input type="button" name="Copy" value="コピー"></td>
</tr>
</table>
</form>
<script type="text/javascript" charset="utf-8">
<!--
var table=document.getElementById("target_table");
var btns=document.getElementsByName("copy");
for(var i=0;i<btns.length;i++){
btns[i].onclick=(function(table){return function(e){
var t = e?e.target:event.srcElement; //IEだけならこれはいらんか!
var target=table.rows[t.parentNode.parentNode.rowIndex].cells[1].firstChild;
var copy_obj=target.createTextRange();
copy_obj.execCommand("Copy")
alert("クリップボードにコピーしました");
}})(table);
}
// -->
</script>
</body>
yyr446さん、ご回答ありがとうございます。IEだけで動作すれば十分です。
ご提示いただいたスクリプトはバッチリ動きました。
これを以下に例示する本番環境に組み込んでみたところ、スクリプトエラーになってしまいますが、
例示いただいたHTMLとは、テーブルの列数が違うのが原因でしょうか?
ついでに、
alert("クリップボードにコピーしました");
の部分は、アラートでなく、文字列選択状態にしてコピーされたことを示したいのですが、山勘で
copy_obj.select
などと変更してみましたが、うんともすんともいいません。
もしよろしければ、こちらもご教示いただけますと幸いです。
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<form method="post" action="">
<table border="1" id="target_table">
<tr>
<td>あ</td>
<td>い</td>
<td>う</td>
<td>ええええ</td>
<td>おおおおおおおおおおおおお</td>
<td>中国から</td>
<td><input type="checkbox" name="val1[]" value="1" checked>
<td><input type="checkbox" name="val2[]" value="1">
<td><input name="mytext[]" value="た_かかかかか_きききき.jpg"><input type="button" name="Copy" value="コピー"></td>
</tr>
</table>
</form>
<script type="text/javascript" charset="utf-8">
<!--
var table=document.getElementById("target_table");
var btns=document.getElementsByName("copy");
for (var i=0; i< btns.length; i++) {
btns[i].onclick=(function(table){return function(e) {
var t = e?e.target:event.srcElement;//IEだけならこれはいらんか!
var target=table.rows[t.parentNode.parentNode.rowIndex].cells[1].firstChild;
var copy_obj=target.createTextRange();
copy_obj.execCommand("Copy")
alert("クリップボードにコピーしました");
}})(table);
}
// -->
</script>
</body>
</html>
No.2
- 回答日時:
ブラウザからjavascriptの機能のみでクリップボードへアクセスすることは
セキュリティ上できません。
フラッシュのツールを使う方法がよく解説されていたりしますが、
ブラウザの種類やバージョンによって挙動が大きく異なるようです。
現実的に考えればできないものと理解した方がいいでしょう。
(どうしてもという場合は前述のフラッシュをさがしてください)
yambejpさん、いつもお世話になってます。
フラッシュの方法をご教示いただきありがとうございました。
#1さんへの御礼に書いたように、もう一歩のところまではいけましたが、
ここで頓挫しています。
引き続き調べてみます。
No.1
- 回答日時:
無理です。
JavaScriptでクリップボードをいじれたら、セキュリティホールです。
クリップボードをいじりたいならブラウザのプラグインなどで実現するしかない。
他の方法としては、prompt() で、表示してユーザに自分でコピーしてもらう。
prompt("コピーしてください",text);
notnotさん、prompt() によるアドバイスありがとうございました。
すみません、自分でもよく調べてみましたら、以下を参考にあと一歩まで実現できました。
http://javascriptmarket.com/script/jsm34.html
ただ、<form>の中に<form>の入れ子になっているので、このままではだめなようです。
引き続き検討してみます。まずは御礼まで。
<html>
<head>
<script>
function clip_copy() {
if (document.all && navigator.userAgent.match(/windows/i) && document.obj.area.value) {
copy_obj = document.obj.area.createTextRange()
copy_obj.execCommand("Copy")
alert("クリップボードにコピーしました");
}
}
</script>
</head>
<body>
<form name="obj">
<input type="text" name="area" value="テスト文字列">
<input type="button" onClick="obj.area.select(); clip_copy();" value="コピー">
</form>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
チェックボックス付きのテーブ...
-
文字数を数える際に空白、改行...
-
画面表示とともにtableの指定の...
-
VBSでの自動ログイン
-
history.backの前に値をクリア...
-
自動計算について
-
JavaScript 初心者ですが詳しい...
-
java scriptで問題集を作りたい...
-
ラジオボタンを一括で操作する...
-
JavaScriptを使って九九の表を...
-
ボタン押下すると一行テキスト...
-
2つのjavascriptを1つにするには
-
入力チェックの外部スクリプト...
-
JavaSprictで時間取得と指定し...
-
Formのシリアライズができない
-
同一nameの input type="text"...
-
Javascriptの電卓で最初の何も...
-
JavaScriptの「.querySelectorA...
-
javascriptで表(テーブル)の自...
-
return trueとreturn falseの用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックス付きのテーブ...
-
localStorageでのcheckbox制御
-
複数のselect値で1つも選択され...
-
JavaScriptの「.querySelectorA...
-
Javascriptの電卓で最初の何も...
-
文字数を数える際に空白、改行...
-
formで項目を連結したい
-
jQueryで合計を出したい
-
Formのシリアライズができない
-
画面表示とともにtableの指定の...
-
テーブル内のチェックボックス...
-
入力チェックの外部スクリプト...
-
ラジオボタンが選択されたらテ...
-
VBSでの自動ログイン
-
Javascriptで自動的に計算する...
-
jQuery テキストボックス読み取...
-
同一nameの input type="text"...
-
ボタンクリックでフォーカス移動
-
画面の2重起動をチェックする...
-
送信ボタン連打を抑止したいです
おすすめ情報