Copia para o Clipboard com Javascrip e/ou Jquery
Estou tentando fazer uma copia para o Clipboard, simulando um click em um determinado botão.
Se clicar Fisicamente, funciona, porem se o click for um "evento simulado", por exemplo um trigger( "click" ),
apesar de o botão ser acionado e a função de copia ser executada, ela simlesmente NÂO COPIA.
Já tentei encontrar uma solução ou pelo menos uma explicação e INUMEROS foruns e ninguém foi capaz de dizer nada.
Será que aqui eu consigo ao menos uma explicação para o fato?
Segue o codigo que estou usando para testes: (Até um timeOut eu coloquei para ver se não era por problema da pagina ainda não ter sido renderizada no navegador).
<!doctype html>
<head>
<meta charset="utf-8">
<title>trigger/Copy testes</title>
<style>
button {
margin: 10px;
}
div {
color: blue;
font-weight: bold;
}
span {
color: red;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body onLoad="primeclick();">
<button>Button #1</button>
<button>Button #2</button>
<div><span>0</span> button #1 clicks.</div>
<div><span>0</span> button #2 clicks.</div>
<!-- Esta é a parte do codigo que interessa -->
<textarea class="textarea">Vamos copiar este texto?</textarea>
<br>
<button class="copiar" id="btncp" >Copiar Texto</button>
<script>
/*
$( "button:first" ).click(function() {
update( $( "span:first" ) );
});
$( "button:last" ).click(function() {
$( "button:first" ).trigger( "click" );
update( $( "span:last" ) );
});
function update( j ) {
var n = parseInt( j.text(), 10 );
j.text( n + 1 );
}
*/
//Copiar
var copyTextareaBtn = document.querySelector('.copiar');
copyTextareaBtn.addEventListener('click', function(event) {
var copyTextarea = document.querySelector('.textarea');
copyTextarea.select();
alert("selecionei");
try {
var successful = document.execCommand('copy');
alert("executei o comando");
var msg = successful ? 'sim!' : 'não!';
alert('Texto copiado? ' + msg);
} catch (err) {
alert('Opa, Não conseguimos copiar o texto, é possivel que o seu navegador não tenha suporte, tente usar Crtl+C.');
}
});
function primeclick() {
alert("entrei");
setTimeout("executaclick()",30000);
alert("praparei");
}
function executaclick(){
clearTimeout();
$( "#btncp" ).trigger( "click" );
}
</script>
</body>
</html>
Se clicar Fisicamente, funciona, porem se o click for um "evento simulado", por exemplo um trigger( "click" ),
apesar de o botão ser acionado e a função de copia ser executada, ela simlesmente NÂO COPIA.
Já tentei encontrar uma solução ou pelo menos uma explicação e INUMEROS foruns e ninguém foi capaz de dizer nada.
Será que aqui eu consigo ao menos uma explicação para o fato?
Segue o codigo que estou usando para testes: (Até um timeOut eu coloquei para ver se não era por problema da pagina ainda não ter sido renderizada no navegador).
<!doctype html>
<head>
<meta charset="utf-8">
<title>trigger/Copy testes</title>
<style>
button {
margin: 10px;
}
div {
color: blue;
font-weight: bold;
}
span {
color: red;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body onLoad="primeclick();">
<button>Button #1</button>
<button>Button #2</button>
<div><span>0</span> button #1 clicks.</div>
<div><span>0</span> button #2 clicks.</div>
<!-- Esta é a parte do codigo que interessa -->
<textarea class="textarea">Vamos copiar este texto?</textarea>
<br>
<button class="copiar" id="btncp" >Copiar Texto</button>
<script>
/*
$( "button:first" ).click(function() {
update( $( "span:first" ) );
});
$( "button:last" ).click(function() {
$( "button:first" ).trigger( "click" );
update( $( "span:last" ) );
});
function update( j ) {
var n = parseInt( j.text(), 10 );
j.text( n + 1 );
}
*/
//Copiar
var copyTextareaBtn = document.querySelector('.copiar');
copyTextareaBtn.addEventListener('click', function(event) {
var copyTextarea = document.querySelector('.textarea');
copyTextarea.select();
alert("selecionei");
try {
var successful = document.execCommand('copy');
alert("executei o comando");
var msg = successful ? 'sim!' : 'não!';
alert('Texto copiado? ' + msg);
} catch (err) {
alert('Opa, Não conseguimos copiar o texto, é possivel que o seu navegador não tenha suporte, tente usar Crtl+C.');
}
});
function primeclick() {
alert("entrei");
setTimeout("executaclick()",30000);
alert("praparei");
}
function executaclick(){
clearTimeout();
$( "#btncp" ).trigger( "click" );
}
</script>
</body>
</html>
Nedio Paulo
Curtidas 0
Respostas
Antonio
05/08/2019
oie apliquei uma melhora ai no css, se gostou diga algo, infelizmente ainda nao tenho muito conhecimento de javascript para te ajudar..
<!doctype html> <head> <meta charset="utf-8"> <title>Criador de textos</title> <style> html,body,h1,h2,p, ul,li,a{ margin: 0; padding: 0; background: teal; } button { margin: 10px; } h3{ color: gray; font-weight: bold; padding-top: 10px; } span { color: red; } .textarea{ margin-top: 30px; height: 150px; width: 400px; padding: 10px; font-size: 16px; font-family:''Courier New'', Courier, monospace ; } .header{ height: 300px; color: white; width: 100%; } .card{ width: 100%; height: 300px; border-radius: 10px; max-width: 600px; margin: 0 auto; position: relative; top: -150px; background: whitesmoke; box-shadow: 8px 4px 8px 10PX rgb(0, 0,0, .7); text-align: center; } .copiar{ padding: 20px 30px; background: teal; border-radius: 8px; border: 1px solid bisque; color: whitesmoke; } .footer{ font-style: italic; text-align: center; color: whitesmoke; } </style> </head> <body> <div onLoad="primeclick();"> <div class="header"> </div> <!-- Esta é a parte do codigo que interessa --> <div class="card"> <div class="main"> <h3>Escreve qualquer coisa no Campo a seguir.</h3> <textarea class="textarea">Vamos copiar este texto?</textarea> <br> <button class="copiar" id="btncp">Copiar Texto</button> </div> </div> <div class="footer"> $design by Antonio Sitoe </div> <script> /* $( "button:first" ).click(function() { update( $( "span:first" ) ); }); $( "button:last" ).click(function() { $( "button:first" ).trigger( "click" ); update( $( "span:last" ) ); }); function update( j ) { var n = parseInt( j.text(), 10 ); j.text( n + 1 ); } */ //Copiar var copyTextareaBtn = document.querySelector(''.copiar''); copyTextareaBtn.addEventListener(''click'', function(event) { var copyTextarea = document.querySelector(''.textarea''); copyTextarea.select(); alert("selecionei"); try { var successful = document.execCommand(''copy''); alert("executei o comando"); var msg = successful ? ''sim!'' : ''não!''; alert(''Texto copiado? '' + msg); } catch (err) { alert(''Opa, Não conseguimos copiar o texto, é possivel que o seu navegador não tenha suporte, tente usar Crtl+C.''); } }); function primeclick() { alert("entrei"); setTimeout("executaclick()",30000); alert("praparei"); } function executaclick(){ clearTimeout(); $( "#btncp" ).trigger( "click" ); } </script> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </body> </html>
GOSTEI 0