Remplacer un input par un textarea

More
1 month 4 weeks ago - 1 month 4 weeks ago #193804 by srauld
Bonjour,

Je souhaite remplacer un input par un textarea au sein d'un tableau de type Texte mais le code ci-dessous ne fonctionne quand je l'insère via l'editeur :
Pouvez-vous me dire pourquoi car cela fonctionne dans une console JS ?
Pouvez-vous aussi me dire comment récupérer les codes des sous-questions ?
<script type="text/javascript" charset="utf-8">
$('td.answer_cell_COMMENTAIRES').each(function(i) { 
$textarea = $("<textarea>");
$textarea.attr("cols",57);
$textarea.attr("rows",12);
$textarea.attr("value","");
  i = i+1;
$('input#answer561562X9X61OFFRE'+i+'_COMMENTAIRES').replaceWith($textarea);
   });
</script>

Merci pour votre réponse
Last edit: 1 month 4 weeks ago by srauld.

Please Log in or Create an account to join the conversation.

LimeSurvey Partners
More
1 month 4 weeks ago #193805 by Nickko
Déjà, il faudrait préciser ce que tu entends par "ne fonctionne pas" et dire quelle version de Limesurvey tu utilises.

Nickko
Head of ergonomics, UX & UI.

Please Log in or Create an account to join the conversation.

More
1 month 4 weeks ago #193808 by srauld
J'utilise la version 3.22.2+200204.
Les inputs visés ne sont pas transformés en Textarea.
Le code fonctionne sans la fonction each. J'arrivais donc à remplacer le premier input mais j'aimerai le faire sur l'ensemble des input de cette colonne.

Merci pour votre réponse.

Please Log in or Create an account to join the conversation.

More
1 month 4 weeks ago #193814 by Nickko
Je suis un peu rouillé en Javascript mais quand je regarde ton code, ce fameux each me semble bizarre, pourquoi avoir une fonction à l'intérieur, et qu'est-ce que cette variable "i" ?

Tu créé une fonction qui reçoit un paramètre i mais je ne vois pas où tu le défini.

Je pense que tu as un problème d'algorithme.

As-tu posé en français sur un coin de papier la logique de ton code ?
Je pense que ça pourrait t'aider.

Nickko
Head of ergonomics, UX & UI.

Please Log in or Create an account to join the conversation.

More
1 month 4 weeks ago #193817 by DenisChenu
Les identifiant vont être trouvable avec
{SGQ}CodeX_CodeY

Donc tu peux te servir de api.jquery.com/attribute-ends-with-selector/

Soit (non testé mais ca doit le faire)
$("#question{QID} [id$='_SY2']").each(function(){
    var newElement = $("<textarea/>",{
        id: $(this).attr("id"),
        name: $(this).attr("name"),
        class: $(this).attr("class"),
    }).val($(this).val());
    $(this).replaceWith(newElement);
}

Tu remarquerta que je fait attention à garder les valeurs précédente, le nom (ce qui sera soumis) la classe (pour le look), l'id pour le javascript .... etc ....

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in or Create an account to join the conversation.

More
1 month 4 weeks ago #193818 by srauld
le i correspond à chaque td ayant la class answer_cell_COMMENTAIRES.

Pour chacune de ces td je remplace un input identifié par une classe comprenant ce i justement (OFFRE1, OFFRE 2, etc).
Mon algorithme fonctionne dans une console JS . Par contre je me base sur des classes qui ne sont peut être pas encore générées au moment du traitement de ce code par Ajax ??
Si c'est le cas comment procéder ?
Pouvez-vous me donner les codes correspondants à chaque sous-question d'un tableau ? J'ai essayé ceci mais sans succès : {SGQ}Y001_X004
Merci

Please Log in or Create an account to join the conversation.

More
1 month 4 weeks ago #193820 by DenisChenu

srauld wrote: Pouvez-vous me donner les codes correspondants à chaque sous-question d'un tableau ? J'ai essayé ceci mais sans succès : {SGQ}Y001_X004

C'est à adapter en fonctions de test codes de sous questions
Voir : manual.limesurvey.org/Expression_Manager#Qcode_Variable_Naming

En sachant que {SGQ} sera remplace par 561562X9X61 dans ton example.

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in or Create an account to join the conversation.

More
1 month 4 weeks ago #193822 by srauld
Oui, j'ai bien le remplacement de {SGQ} par la suite alphanumérique mais par contre je n'arrive pas à récupérer les valeurs correspondantes aux sous-questions. Y001 ne serait donc pas la variable correspondant à la 1ère sous-question en Y du tableau et idem pour le X ?
Faut-il que je reprenne les valeurs que j'ai mentionné quand j'ai créé le tableau ?

Merci pour votre réponse.

Please Log in or Create an account to join the conversation.

More
1 month 4 weeks ago #193825 by DenisChenu

srauld wrote: Faut-il que je reprenne les valeurs que j'ai mentionné quand j'ai créé le tableau ?

DenisChenu wrote: C'est à adapter en fonctions de test codes de sous questions
Voir : manual.limesurvey.org/Expression_Manager#Qcode_Variable_Naming


Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in or Create an account to join the conversation.

More
1 month 1 week ago #194603 by srauld
Bonjour,

Je n'arrive toujours pas à obtenir le remplacement de mon input par un textarea.
Mon script fonctionne en console JS mais quand je le mets dans le source de mon formulaire rien ne se fasse.
var index = 1;  
$("#question"+qID+" table.ls-answers tr td.answer_cell_COMMENTAIRES").each(function()  { 
$("input[id='answer641792X9X61OFFRE"+ index +"_COMMENTAIRES']").replaceWith("<textarea name='answer641792X9X61OFFRE"+ index +"_COMMENTAIRES' cols='57' rows='12' value=''></textarea>");
 
index = index +1;
 
 
   });
J'ai l'impression que la fonction each ne fonctionne pas. J'ai essayé de contourner le problème en sélectionnant l'input en fonction de la composition de son id mais celui-ci doit commencer par "answer" et finir par "COMMENTAIRES" et je n'arrive pas à trouver la bonne syntaxe pour cela.

Pouvez-vous m'aider ?

Merci pour votre réponse.

Please Log in or Create an account to join the conversation.

More
1 month 1 week ago #194604 by DenisChenu
Vu que j'ai l'impression que tu ne lis aucun de mes conseils (en tous cas : tu ne les applique pas ) ... je laisse tomber.

Et puis pourquoi doit commencer par answer ??? suffit deprendre les input:text ...

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in or Create an account to join the conversation.

More
1 month 1 week ago #194612 by srauld
Bonjour,

Si au contraire, j'ai lu vos conseils et je les ai appliqués mais j'arrive au même résultat. Je suis donc allée sur le lien que vous m'aviez donné api.jquery.com/attribute-ends-with-selector/. Il existe un input avec un id commençant par java et finissant par COMMENTAIRES dans l'HTML, je peux donc utiliser cette fonction qu'en l'associant à
$( "input[id^='answer']" )

J'ai 15 champs similaires sur mon formulaire leur identifiant comprend donc un nombre qui est incrémenté pour chacun d'entre eux d'où ma variable index.

Merci pour votre réponse

Please Log in or Create an account to join the conversation.

More
1 month 1 week ago #194619 by srauld
Bonjour,

J'ai trouvé comment afficher mes textearea pour chaque ligne. Voic le code utilisé :
$("#question"+qID+" table.ls-answers tr td.answer_cell_COMMENTAIRES").ready(function()  { 
name = $("input[id$='COMMENTAIRES'][id^='answer']").attr('id');
$("input[id$='COMMENTAIRES'][id^='answer']" ).val( name );
 
$("input[id$='COMMENTAIRES'][id^='answer']").replaceWith("<textarea name='"+ name +"' cols='57' rows='12' value=''></textarea>");
 
   });
 
   });

Bonne journée
The following user(s) said Thank You: DenisChenu

Please Log in or Create an account to join the conversation.

Moderators: Nickko

Start now!

Just create your account and start using Limesurvey today.

Register now
Join our Newsletter!