javascript - 在 A/B 测试工具中复制到剪贴板
问题描述
我是 JQuery 和一个名为 Convert 的 A/B 测试工具的新手。在其中一个实验中,我想添加一小段文本,当用户单击它时,它会将文本复制到剪贴板并显示一个工具提示,上面写着“已复制!” 但由于某种原因,代码不起作用,它没有显示错误,就像它甚至没有运行一样。我找不到错误,我不确定它是否可能是给我带来问题的工具,但希望有更多经验的人看看并告诉我是否做错了什么以了解如何改进。
这是HTML:
<a id="copy-promo-btn" href="#">PLUS79</a>
这是CSS:
.copy-notification {
color: #ffffff;
background-color: rgba(0,0,0,0.8);
padding: 20px;
border-radius: 30px;
position: fixed;
top: 50%;
left: 50%;
width: 150px;
margin-top: -30px;
margin-left: -85px;
display: none;
text-align:center;}
这是javascript:
convert.$(document).ready(function() {
$(document).ready(function () {
$("#copy-promo-btn").click(function (event) {
event.preventDefault();
CopyToClipboard("PLUS79", true, "Copied!");
});
});
function CopyToClipboard(value, showNotification, notificationText) {
var $temp = $("<input>");
$("body").append($temp);
$temp.val(value).select();
document.execCommand("copy");
$temp.remove();
if (typeof showNotification === 'undefined') {
showNotification = true;
}
if (typeof notificationText === 'undefined') {
notificationText = "Copied!";
}
var notificationTag = $("div.copy-notification");
if (showNotification && notificationTag.length == 0) {
notificationTag = $("<div/>", { "class": "copy-notification", text: notificationText });
$("body").append(notificationTag);
notificationTag.fadeIn("slow", function () {
setTimeout(function () {
notificationTag.fadeOut("slow", function () {
notificationTag.remove();
});
}, 1000);
});
}
}
});
解决方案
这是通过将一些 java 脚本添加到现有代码中来将单击事件中的文本复制到剪贴板的方法。
.select()
在您的情况下不起作用,因为它只选择文本但它不会复制它,在您的情况下,您还需要单击以复制和粘贴。
补充几点:
- 您需要在正文中创建元素并将文本值复制到其中
- 一旦复制成功,它将从 DOM 中删除输入值
运行下面的代码片段以查看它的工作原理。
$(document).ready(function() {
$("#copy-promo-btn").click(function(event) {
event.preventDefault();
CopyToClipboard("PLUS79");
});
});
function CopyToClipboard(value) {
var copyvalue = document.createElement('input');
copyvalue.value = value
document.body.appendChild(copyvalue);
copyvalue.select();
document.execCommand('copy');
console.log(copyvalue.value)
document.body.removeChild(copyvalue);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a id="copy-promo-btn" href="#">PLUS79</a>
推荐阅读
- python-2.7 - 使用 Joblib+Dask 将许多子进程生成到 HPC 上的许多不同节点
- html - 内联Content-Security-Policy 是否会影响服务器的策略?
- sql-server - SQL Server:在 CASE 和 ELSE 部分中调用相同的函数
- javascript - 脚本返回“TypeError:无法从 NULL 读取属性长度”,即使它不是
- c++ - 如何在 C++ 应用程序中正确包含标题并使用 STL 向量?
- c# - C# 显示窗口不工作(#32770 (Dialog))
- php - 提交失败后如何保留表单输入
- java - 尝试连接 RMI 服务器时出现 NotBoundException
- powershell - 如何轻松地在 cmdlet 之间传递所有参数?
- php - 如果所选字段包含某些字符串或域名,则阻止表单提交