我正在创建一个lorem ipsum生成器,并从中获得了很多乐趣。但是,我试图创建一个按钮,您可以在其中复制生成的文本。我在哪里出错了?
我有一个单独的javascript文件,可以成功生成文本,只是想知道如何准确地复制文本
<body>
<center>
<h1 class="title">Lorem Ipsum Generator</h1>
<p class="description">A Harry Potter lorem ipsum generator.</p>
<form action="/" method="POST">
<input type="number" class="paragraph-number" name="numberOfParagraphs">
<input type="submit" value="Expecto Patronum!" class="generate-button">
<input type="reset" value="clear" class="generate-button">
</form> </center>
<center>
<div class="border"><div id="generated-text">
<div class='placeholder-div'></div>
</div>
</div>
<button onclick="copyPassage()" class="copy-button">Copy text</button>
<script src=/generator.js>
function copyPassage() {
var copyText = document.getElementById("generated-text");
copyText.select();
document.execCommand("copy");
alert("Copied the text: " + copyText.value);
}
</script>
答案 0 :(得分:1)
您很近,但是有几处出现了问题。首先,按顺序评估DOM,因此onclick处理程序不了解您的函数,因为它是在元素之后声明的;这会导致未捕获的ReferenceError:未定义copyPassage 。
接下来,使用了错误的方法来实际选择文本。您使用.select()
导致了未捕获的TypeError:copyText.select不是函数。
相反,对于选择,您应该使用selectAllChildren
MDN。
在此处查看其运行情况:
<script>
function copyPassage() {
var copyText = document.getElementById("generated-text");
window.getSelection().selectAllChildren(copyText);
document.execCommand("copy");
alert("Copied the text: " + copyText.innerText);
}
</script>
<button onclick="copyPassage()" class="copy-button">Copy text</button>
<div class="border">
<div id="generated-text">
<div class='placeholder-div'>Harry Potter</div>
</div>
</div>