Jump to content

Função que copia String com condições


Go to solution Solved by Zex,

Recommended Posts

Hercles

Olá! Caros estou tentando desenvolver uma função que copia parte de uma string da ultima linha de uma textarea e coloca em uma input do tipo text. A ideia seria quando o usuario digitasse traço, a palavra  depois seria colocada numa input text (#a-1) e quando digitasse  espaço em uma outra input text ('#a-2). Alguém sabe se isso seria possivel? Vejam o código que eu ja fiz:


 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 

<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css">

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script>
window.oninput = function(event){
   
   var campo = event.target.id; // pega o id do campo que chamou o evento
   
   var texto = document.querySelector('#a').value;
   var nome = texto.substring(texto.lastIndexOf("-")+1);
   var telefone = texto.substring(texto.lastIndexOf(" ")+1);
   if(campo == "a"){
        
        document.querySelector('#a-1').value = nome;
        document.querySelector('#a-2').value = telefone;
 
   };
</script>

<h2>Estes campo é diretamente automático</h2>
<textarea id="a"></textarea></br></br>
Nome: <input type="text" id="a-1"><br></br>
Telefone: <input type="text" id="a-2"><br></br>

 

Link to post
Share on other sites
Hercles
Posted (edited)

A textarea serve como um bloco de notas. Na verdade os dados que ficam lá é o nome e o código do cliente. Depois ele é copiado da textarea e colocado nos dois campos do formulário. Pra evitar de copiar e colar, tive está idéia de automatizar. Depois que o atendimento é feito, os dados do formulário somem e eu preciso que continue as informações da textarea. 

Edited by Hercles
Erro de digitação
Link to post
Share on other sites
  • Solution
Zex
Posted (edited)

Seria melhor processar apenas depois de carregar em enter

e nessa altura processar a última linha com dados.

Eis a versão a funcionar com os separadores "-" e " ":


<body>


<h2>Estes campo é diretamente automático</h2>
<textarea id="ta" rows="6" cols="40"></textarea></br></br>

Nome: <input type="text" id="nome"><br></br>
Telefone: <input type="text" id="fone"><br></br>

</body>


<script>

window.oninput = function(event){
  var campo = event.target.id; // pega o id do campo que chamou o evento
  var texto = document.querySelector('#ta').value; // texto completo

  var area_linhas = texto.split("\n") 
  var ultima_linha = area_linhas[area_linhas.length-1]

  if ( ultima_linha[ultima_linha.length-1] == '-' ) 
     {
     var nome = ultima_linha.substring( 0, ultima_linha.length-1 )
     document.querySelector('#nome').value = nome;
     document.querySelector('#fone').value = '';
     }
  	
  if ( ultima_linha[ultima_linha.length-1] <= ' ' ) 
     {
     var nome_index = ultima_linha.lastIndexOf( '-' )+1
     var fone = ultima_linha.substring( nome_index, ultima_linha.length-1 )
     document.querySelector('#fone').value = fone;
     }
  	
} // oninput

</script>

 

Edited by Zex
Link to post
Share on other sites
Hercles
Posted (edited)
4 horas atrás, Zex disse:

Seria melhor processar apenas depois de carregar em enter

e nessa altura processar a última linha com dados.

Eis a versão a funcionar com os separadores "-" e " ":




<body>


<h2>Estes campo é diretamente automático</h2>
<textarea id="ta" rows="6" cols="40"></textarea></br></br>

Nome: <input type="text" id="nome"><br></br>
Telefone: <input type="text" id="fone"><br></br>

</body>


<script>

window.oninput = function(event){
  var campo = event.target.id; // pega o id do campo que chamou o evento
  var texto = document.querySelector('#ta').value; // texto completo

  var area_linhas = texto.split("\n") 
  var ultima_linha = area_linhas[area_linhas.length-1]

  if ( ultima_linha[ultima_linha.length-1] == '-' ) 
     {
     var nome = ultima_linha.substring( 0, ultima_linha.length-1 )
     document.querySelector('#nome').value = nome;
     document.querySelector('#fone').value = '';
     }
  	
  if ( ultima_linha[ultima_linha.length-1] <= ' ' ) 
     {
     var nome_index = ultima_linha.lastIndexOf( '-' )+1
     var fone = ultima_linha.substring( nome_index, ultima_linha.length-1 )
     document.querySelector('#fone').value = fone;
     }
  	
} // oninput

</script>

 

Funciona. Vendo o seu código tive uma outra idéia. Será que é possível colocar num array a ultima linha  separarando por "-" aí pelo número do array poderia colocar nos campos. Melhor seria se fosse possível a linha que o mouse estivese. 

Edited by Hercles
Adicionei mais informação
Link to post
Share on other sites
Hercles
Posted (edited)
Em 05/06/2021 às 00:49, Zex disse:

Pode-se obter a linha onde está o cursor com

cursor_pos = texto.selectionStart;

 Este código não deveria funcionar? 

<script>
   var campo = event.target.id; // pega o id do campo que chamou o evento
   var texto = document.querySelector('#ta').value; // texto completo

   cursor_pos = texto.selectionStart;

   var linha = cursor_pos.split("-");
   var nome = linha[0];
   var telefone = linha[1];

   document.querySelector('#nome').value = nome;
   document.querySelector('#fone').value = telefone;
</script>

 

Edited by pwseo
formatação de código
Link to post
Share on other sites
Hercles
Posted (edited)

Fiz este código abaixo .  Não consegui fazer com que seja na linha onde o cursor estiver.

<body>
<h2>Estes campo é diretamente automático</h2>
<textarea id="ta" rows="6" cols="40"></textarea></br></br>
Nome: <input type="text" id="nome"><br></br>
Telefone: <input type="text" id="fone"><br></br>
</body>
<script>
window.oninput = function(event){
   var texto = document.querySelector('#ta').value; // texto completo
   var area_linhas = texto.split("\n") 
   var ultima_linha = area_linhas[area_linhas.length-1]
   var linha = ultima_linha.split(".") 

   if (linha.length == 1) {
      document.querySelector('#nome').value = linha[0];
      document.querySelector('#fone').value = "";    
   }
   if (linha.length == 2) {
      var final = ultima_linha[linha.length - 1];
      document.querySelector('#nome').value = linha[0];
      document.querySelector('#fone').value = linha[1];    
   }
} 
</script>

 

Edited by pwseo
formatação de código
Link to post
Share on other sites
Zex
18 horas atrás, Hercles disse:

Não consegui fazer com que seja na linha onde o cursor estiver.

 

Para usar a posição do CURSOR o melhor é esquecer o EVENTO.

Posiciona-se o cursor e clica-se num botão para processar a linha seleccionada.

Link to post
Share on other sites
Hercles
2 horas atrás, Zex disse:

 

Para usar a posição do CURSOR o melhor é esquecer o EVENTO.

Posiciona-se o cursor e clica-se num botão para processar a linha seleccionada.

Entendi. Obrigado pela ajuda. Com o que você me disse já resolve.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.