鱼C论坛

 找回密码
 立即注册
查看: 5479|回复: 1

如何实现一个按钮点一下就能让用户复制到文本内容

[复制链接]
发表于 2021-1-29 20:48:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
比如这样:一个</button id="copy">  点我复制<button>。

我就想实现这样一个功能 用户点了那个按钮     ,,,用户 鼠标右键点“粘贴”的时候 就是我想让他复制的文本。

就是类似于手机上那个验证码发过来 短信上会有一个“ 复制验证码”的按钮 你点了你就成功复制了那个验证码。

谢谢&#128031;c大佬,求,帮忙解决问题 万分感谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-29 23:32:06 | 显示全部楼层
你需要一个绝对定位到屏幕之外的input标签 假设这个标签叫dataTag
当cope按钮触发时只需要:
dataTag.value = 你需要复制的内容
dataTag.select()
document.execCommand("copy")

附带一个我以前写的项目的代码
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <title>medication dumps</title>
  6.         <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
  7.         <link rel="stylesheet"  integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  8.         <script src="https://cdn.jsdelivr.net/npm/sweetalert2@8"></script>
  9.         <style>
  10.             html,body{
  11.                 font-size:16px !important;
  12.                 overflow:hidden
  13.             }
  14.             .form-group{
  15.                 margin-bottom:10px
  16.             }

  17.             input{
  18.                 font-size:16px !important;
  19.             }
  20.             .control-label{
  21.                 text-align:right;
  22.                 padding-top:7px
  23.             }
  24.             h1{
  25.                 font-size:28px !important;
  26.             }
  27.         </style>
  28.     </head>
  29.     <body ondragstart="return false">
  30.         <div id="app">
  31.             <div class="page-header col-md-6 col-md-offset-3" style="margin-top:0;margin-bottom:0">
  32.                 <h1>药房<small>medication dumps</small></h1>
  33.             </div>
  34.             <div class="row">
  35.                 <div class="panel panel-default col-md-12 col-lg-6 col-lg-offset-3" >
  36.                     <div class="panel-body">
  37.                         <form class="form-horizontal">
  38.                             <div class="form-group ">
  39.                                 <label class="col-xs-4 col-sm-3 control-label" for="formGroupInputSmall">姓名</label>
  40.                                 <div class="col-xs-8 col-sm-6">
  41.                                     <input class="form-control" type="text" v-model="姓名" @blur="test('姓名',$event)" placeholder="简体中文">
  42.                                 </div>
  43.                             </div>
  44.                             <div class="form-group ">
  45.                                 <label class="col-xs-4 col-sm-3 control-label" for="formGroupInputSmall">性别</label>
  46.                                 <div class="col-xs-8 col-sm-6">
  47.                                     <input type="radio" name="Sex" value="男" v-model="性别"/>&nbsp;&nbsp;&nbsp;&nbsp;男&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="Sex" value="女" v-model="性别"/>&nbsp;&nbsp;&nbsp;&nbsp;女
  48.                                 </div>
  49.                             </div>
  50.                             <div class="form-group ">
  51.                                 <label class="col-xs-4 col-sm-3 control-label" for="formGroupInputSmall">年龄</label>
  52.                                 <div class="col-xs-8 col-sm-6">
  53.                                     <input class="form-control" type="text" v-model="年龄" @blur="test('年龄',$event)" placeholder="1到3位数字">
  54.                                 </div>
  55.                             </div>
  56.                             <div class="form-group ">
  57.                                 <label class="col-xs-4 col-sm-3 control-label" for="formGroupInputSmall">身份证</label>
  58.                                 <div class="col-xs-8 col-sm-6">
  59.                                     <input class="form-control" type="text" v-model="身份证号码" @blur="test('身份证号码',$event)" placeholder="15或18位数字">
  60.                                 </div>
  61.                             </div>
  62.                             <div class="form-group ">
  63.                                 <label class="col-xs-4 col-sm-3 control-label" for="formGroupInputSmall">诊断</label>
  64.                                 <div class="col-xs-8 col-sm-6">
  65.                                     <input class="form-control" type="text" v-model="诊断">
  66.                                 </div>
  67.                             </div>
  68.                             <div class="form-group ">
  69.                                 <label class="col-xs-4 col-sm-3 control-label" for="formGroupInputSmall">商品名称</label>
  70.                                 <div class="col-xs-8 col-sm-6">
  71.                                     <input class="form-control" type="text" v-model="商品名称" placeholder="自编码未知时必填">
  72.                                 </div>
  73.                             </div>
  74.                             <div class="form-group ">
  75.                                 <label class="col-xs-4 col-sm-3 control-label" for="formGroupInputSmall">自编码</label>
  76.                                 <div class="col-xs-8 col-sm-6">
  77.                                     <input class="form-control" type="text" v-model="商品条码" @blur="test('商品条码',$event)" placeholder="9位数字(见小票)">
  78.                                 </div>
  79.                             </div>
  80.                             <div class="form-group ">
  81.                                 <label class="col-xs-4 col-sm-3 control-label" for="formGroupInputSmall">数量</label>
  82.                                 <div class="col-xs-8 col-sm-6">
  83.                                     <input class="form-control" type="text" v-model="数量" @blur="test('数量',$event)" placeholder="不带单位">
  84.                                 </div>
  85.                             </div>
  86.                             <div class="form-group ">
  87.                                 <label class="col-xs-4 col-sm-3 control-label" for="formGroupInputSmall">用法用量</label>
  88.                                 <div class="col-xs-8 col-sm-6">
  89.                                     <input class="form-control" type="text" v-model="用法用量">
  90.                                 </div>
  91.                             </div>
  92.                         </form>
  93.                         <hr style="margin:5px 0" />
  94.                         <div class="row">
  95.                         <input ref="dataTag" style="position: absolute;top: 0;left: 0;opacity: 0;z-index: -10;"/>
  96.                         <button type="button" class="btn btn-warning col-xs-4 col-xs-offset-1" @click="clear()">清空</button>
  97.                         <button type="button" class="btn btn-primary col-xs-4 col-xs-offset-2" @click="copy()">复制</button>
  98.                         </div>
  99.                     </div>
  100.                 </div>
  101.             </div>
  102.         </div>
  103.         <script>
  104.             class Storage{
  105.                 constructor(name,initdata){
  106.                     this.name = name
  107.                     this.initdata = initdata
  108.                 }
  109.                 get(){
  110.                     return JSON.parse(localStorage.getItem(this.name)) || this.initdata
  111.                 }
  112.                 set(data){
  113.                     localStorage.setItem(this.name, JSON.stringify(data))
  114.                 }
  115.                 static clear(){
  116.                     localStorage.clear()
  117.                 }
  118.             }
  119.             const initdata = '{"姓名":"","年龄":"","性别":"男","身份证号码":"","诊断":"","商品名称":"","商品条码":"","数量":"","用法用量":""}'
  120.             const re = {
  121.                 姓名:'^[\\u4e00-\\u9fa5]*,
  122.                 年龄:'^[0-9]{1,3},
  123.                 身份证号码:'(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)',
  124.                 商品条码:'[0-9]{9}',
  125.                 数量:'^[0-9]*,
  126.             }
  127.             const sp = "        "
  128.             const vm = new Vue({
  129.                 el: '#app',
  130.                 data: function(){
  131.                     return JSON.parse(initdata)
  132.                 },
  133.                 methods: {
  134.                     copy: function(){
  135.                         let dataTag = this.$refs.dataTag
  136.                         st.set(this.$data)
  137.                         dataTag.value = sp + JSON.stringify(this.$data).replace(/,/g,",") + sp
  138.                         dataTag.select()
  139.                         document.execCommand("copy")
  140.                         Swal.fire({
  141.                             position: 'center',
  142.                             type: 'success',
  143.                             title: '复制完成',
  144.                             showConfirmButton: false,
  145.                             timer: 1500
  146.                         })
  147.                     },
  148.                     init: function(){
  149.                         let data = st.get()
  150.                         for(let i in data){
  151.                             this.$data[i] = data[i]
  152.                         }
  153.                     },
  154.                     clear:function(){
  155.                         Storage.clear()
  156.                         this.init()
  157.                     },
  158.                     test:function(type,e){
  159.                         if(this[type]===""){return}
  160.                         if(this[type].match(new RegExp(re[type],"g"))===null){
  161.                             Swal.fire({
  162.                                 position: 'center',
  163.                                 type: 'warning',
  164.                                 title: type + '填写不合要求',
  165.                                 showConfirmButton: false,
  166.                                 timer: 1000
  167.                             })
  168.                             //setTimeout(function(){e.target.focus()},1000)
  169.                         }
  170.                     }
  171.                 },
  172.                 created() {
  173.                     st = new Storage('medication',JSON.parse(initdata))
  174.                     let data = st.get()
  175.                     for(let i in data){
  176.                         this.$data[i] = data[i]
  177.                     }
  178.                 }
  179.             });
  180.         </script>
  181.     </body>
  182. </html>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 16:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表