プロが教える店舗&オフィスのセキュリティ対策術

昔、このサイト(https://oshiete.goo.ne.jp/qa/5902577.html)で教えていただいた
「一行テキストフォームの値をクリップボードにコピーするボタン」が、
最新のIE11やFireFox39で動作しません。

IE11でIE8モードにエミュレーションすると動作します。
どこを直せばいいでしょうか・・・・


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript">
<!--
document.onclick = function (evt) {
var e = evt ? evt.target: event.srcElement,c = 0, cols, o;
if (/TD/.test(e.nodeName)) while (o = e.parentNode.cells[c++]) o.className = o.className ? '': 'hlcheck';
}

function valcng(e) {
var i=0, s, sel = e.form.getElementsByTagName("select");
while (s=sel[i++]) if (s.name == e.name && s != e) s.selectedIndex = e.selectedIndex;
}
//-->
</script>

</head>
<body>
<table border="1" id="target_table">
<tr>
<td>1</td>
<td>※</td>
<td>1年生</td>
<td>佐藤太郎</td>
<td>経済学部</td>
<td><input type="checkbox" name="photo[]" value="1" checked>
<td><input type="checkbox" name="papar[]" value="1">
<td><input size="10" value="佐藤太郎">
<input type="button" name="Copy" value="コピー"></td>
</tr>
<tr class="hl">
<td>2</td>
<td>○</td>
<td>4年生</td>
<td>鈴木次郎</td>
<td>法学部</td>
<td><input type="checkbox" name="photo[]" value="3">
<td><input type="checkbox" name="papar[]" value="3">
<td><input size="10" value="鈴木次郎">
<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;
var target=table.rows[t.parentNode.parentNode.rowIndex].cells[7].firstChild;
var copy_obj=target.createTextRange();
copy_obj.execCommand("Copy")
target.select();
}})(table);
}
// -->
</script>


</center>
</body>
</html>

A 回答 (1件)

最近のIEはクリップボードを操作できるようになったみたいですね


環境をしぼっていいなら
window.clipboardData.setData()
などでコピーすればよいでしょう

その他のブラウザに関しては以前も書いたみたいですが
flashなどを利用したzeroclipboardなどのライブラリを使うのが
一般的みたいですよ

あとは最近HTML5にclipboard APIが用意されいたりとか
    • good
    • 0
この回答へのお礼

yamabejpさん、ありがとうございます。

自分のIE11でだけ動作すれば十分ですが、仰せのwindow.clipboardData.setData()を、
http://www.openspc2.org/reibun/javascript/specia …など参考に動作できました。

ただ、複数行があるため1行目のボタン押下で、2行目鈴木がクリップボードに送られてしまいます。
getElementsByNameとか、難しいコードを導入せざるを得ないでしょうか?


<script Language="JavaScript"><!--
function setCB()
{
txt = document.xForm.result.value;
window.clipboardData.setData("text",txt);
}
// --></script>

<form name="xForm">
<table border="1" id="target_table">
<tr>
<td><input type="checkbox" name="photo[]" value="1">
<td><input type="checkbox" name="papar[]" value="1">
<td><input value="佐藤">
<input type="button" name="Copy" value="コピー" name="result" onclick="setCB()"></td>
</tr>
<tr>
<td><input type="checkbox" name="photo[]" value="3">
<td><input type="checkbox" name="papar[]" value="3">
<td><input value="鈴木" name="result">
<input type="button" name="Copy" value="コピー" onclick="setCB()"></td>
</tr>
</table>
</form>

お礼日時:2015/08/03 17:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!