[JS]Split sur retour à la ligne

Split sur retour à la ligne [JS] - HTML/CSS - Programmation

Marsh Posté le 29-06-2009 à 23:40:53    

Bonjour, souhaite découper une chaine sur les retours à la ligne avec split() en JS, mais j'ai un peu de mal :/
 
J'ai testé :

Code :
  1. function pasteCol(event)
  2. {
  3.  var notes=document.getElementById('note_0').value;
  4.  var tab= new RegExp('[\r\n]');
  5.  notes=notes.split(tab);
  6.  document.getElementById('note_0').value=notes[0];
  7.  document.getElementById('note_1').value=notes[1];
  8.  document.getElementById('note_2').value=notes[2];
  9. }


 
et
 

Code :
  1. function pasteCol(event)
  2. {
  3.  var notes=document.getElementById('note_0').value;
  4.  var tab= new RegExp();
  5.  notes=notes.split("\r\n" );
  6.  document.getElementById('note_0').value=notes[0];
  7.  document.getElementById('note_1').value=notes[1];
  8.  document.getElementById('note_2').value=notes[2];
  9. }


 
chacune avec \r, \n ou \r\n mais ca ne marche pas:/


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 29-06-2009 à 23:40:53   

Reply

Marsh Posté le 30-06-2009 à 10:23:31    

que je teste moi avec le code que je t'ai mis dans ton autre topic, le alert() qui me permet de savoir que l'élément est déclenché apparait avant le texte dans l'input.  
 
du coup j'aurais tendance à dire que le problème ne vient pas du split, mais du fait que la case est encore vide au moment ou tu fais le split...

Reply

Marsh Posté le 30-06-2009 à 10:36:29    

sinon, pour la petite histoire, je viens de m'apercevoir qu'il y avait un évenement onpaste sur les input (qui a l'air de foncionner sur ie et ff)... pourquoi tu n'as pas utilisé ca?

Reply

Marsh Posté le 30-06-2009 à 10:43:21    

j'ai testé, même en supposant que j'ai tort sur l'histoire de l'enchainement (le input qui n'est pas encore rempli), le fait de coller un texte sur plusieurs lignes me le remet sur une ligne avec des espaces... je sais pas trop comment tu peux faire du coup. je suis en train de regarder du coté du onpaste.

Reply

Marsh Posté le 30-06-2009 à 16:19:50    

Je pense que l'ordre est bon, car si je split sur le caractère " " (espace) et qu je colle une chaine genre 0 2 4 ca marche ;)


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 01-07-2009 à 12:48:32    

En fait, je pense que tu as raison, je pense qu'il y a un problème de séquencement ...
 
si je fais  

Code :
  1. function pasteCol(event)
  2. {
  3.  alert("collé" );
  4.  var notes=document.getElementById('note_0').value;
  5.  var tab= new RegExp('\r\n|\r|\n');
  6.  alert(notes);
  7.  notes=notes.split(tab);
  8.  document.getElementById('note_0').value=notes[0];
  9.  document.getElementById('note_1').value=notes[1];
  10.  document.getElementById('note_2').value=notes[2];
  11. }


 
J'ai l'alert "collé", puis un alert vide, puis le texte se colle dans l"input "note_0" ... ce qui voudrait dire que l'événement observé par prototype est lancé avant que l'action "coller" soit effectivement faite et je ne sais pas comment contourner ça :cry:


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 01-07-2009 à 13:44:40    

c'est ce qu'il m'avait semblé... je ne sais pas comment tu peux contourner ca.

Reply

Marsh Posté le 01-07-2009 à 15:00:00    

1er problème résolu, le split ne marche pas sur \r\n avec un input text, ca marche avec un textarea par contre, maintenant, il me reste à voir comment gérer l'evenement coller


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 01-07-2009 à 15:05:59    

Bon, ben j'ai fait le cochon mais ca marche ;)

Code :
  1. function pasteCol(event)
  2. {
  3.  setTimeout("filltextareas()",500);
  4. }
  5. function filltextareas(){
  6.  var notes=document.getElementById('note_0').value;
  7.  var tab= new RegExp('\r\n|\r|\n');
  8.  notes=notes.split(tab);
  9.  document.getElementById('note_0').value=notes[0];
  10.  document.getElementById('note_1').value=notes[1];
  11.  document.getElementById('note_2').value=notes[2];
  12. }


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 04-07-2009 à 07:51:13    

Code :
  1. function pasteCol(event)
  2. {
  3.  setTimeout(filltextareas,500);
  4. }
  5. function filltextareas(){
  6.  var notes=document.getElementById('note_0').value;
  7.  notes=notes.split(/\r\n|\r|\n/);
  8.  for (var i=0; i<notes.length; i++)
  9.   document.getElementById('note_'+i).value=notes[i];
  10. }
 

PS : c'est un peu une hérésie de passer une string dans setTimeout alors qu'on peut passer directement une référence à une fonction, dans ce cas tu remarqueras que je n'ai pas mis les guillemets de la fonction, sinon elle se serait immédiatement éxécutée


Message édité par gatsu35 le 04-07-2009 à 07:51:37

---------------
Blablaté par Harko
Reply

Marsh Posté le 04-07-2009 à 07:51:13   

Reply

Marsh Posté le 04-07-2009 à 09:41:09    

J'ai enlevé les ", et merci pour le for, mais là c'était pour l'exemple, les "note_i" proviennent d'un script php qui les génère en fonction d'une requête sql (ils ne se suivent pas ;))


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 06-07-2009 à 11:30:19    

getget a écrit :

J'ai enlevé les ", et merci pour le for, mais là c'était pour l'exemple, les "note_i" proviennent d'un script php qui les génère en fonction d'une requête sql (ils ne se suivent pas ;))


ah et faut aussi enlever les () car sinon tu auras droit à une execution immediate de ta fonction


---------------
Blablaté par Harko
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed