[JS] REmplacer la valeur d'un form, select ou option dynamiquement

REmplacer la valeur d'un form, select ou option dynamiquement [JS] - HTML/CSS - Programmation

Marsh Posté le 13-01-2008 à 01:21:07    

J'ai écris un script qui fonctionne tres bien sous IE grace a la techno AJAX (innerHTML et autres) qui fonctionne tres bien sous firefox et plante sous IE (cf http://forum.hardware.fr/hfr/Progr [...] 1015_1.htm)
Je cherche a ecrire une methode pour IE, et je suis capable d'écrire du html, creer un bouton par exemple grace au code suivant :

Code :
  1. if(!document.getElementById("button_send" ))
  2.       {
  3.          element=  document.createElement("<input>" );
  4.          element.setAttribute("type", "button" );
  5.          element.setAttribute("id", "button_send" );
  6.          element.setAttribute("value", name);
  7.          element.setAttribute("name", "send_question" );
  8.          element.setAttribute("onclick", action);
  9.          document.getElementById(obj).appendChild(element);
  10.       }


 
Probleme : je cherche maintenant a écrire aussi mes menu deroulants (select et option) mais aussi à les détruire en fonction des actions de l'utilisateur.
Premiere probleme : je peut en créer autant que je veut, mais ils sont vides (impossible de mettre le texte du module option) :

Code :
  1. element=  document.createElement("<select>" );
  2.          element.setAttribute("id", "subform"+numCategory);
  3.          element.setAttribute("name", "category"+numCategory);
  4.          element.setAttribute("onchange", "getListDirectories(this.value,"+numCategory+" )" );
  5.          document.getElementById(obj).appendChild(element);
  6.          element= document.createElement("<option>" );
  7.          element.setAttribute("value", id_categorie);
  8.          document.getElementById(obj).appendChild(element);


Comment mettre du texte a option ? j'ai essaye un insertdata du type document.getElementById('option'+numCategory).insertData(0, text); apres avoir fait le appendChild, mais sans succes (erreur d'ie)
 
Deuxième probleme : j'aimerai aussi pouvoir supprimer un select (avec un getElementById) : comment faire ? J'ai cherche a ecrire quelque chose de vide, sans succes, faire un removeChild, j'ai essayé plein de fonctions trouvées à la page http://www.java2s.com/Code/JavaScr [...] ethods.htm mais je n'y arrive pas !
 
Je vous remercie d'avance, si vous avez la solution !


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 13-01-2008 à 01:21:07   

Reply

Marsh Posté le 13-01-2008 à 23:10:53    

Bon j'ai mieux : pour remplacer les lignes suivantes qui fonctionnent tres bien sur firefox mais pas sous ie :

Code :
  1. if(clearlist==-2)
  2.          document.getElementById(obj).innerHTML = entete+pied;
  3.       else if(clearlist==-1)
  4.          document.getElementById(obj).innerHTML = entete+txtselect+txt+pied;
  5.       else
  6.          document.getElementById('subform'+numCategory).innerHTML = document.getElementById('subform'+numCategory).innerHTML + txt + pied;


 
J'ai écris un truc qui marche un peu (mais pas completement)

Code :
  1. if(clearlist==-2)
  2.       {
  3.          try{
  4.             document.getElementById(obj).outerHTML=entete+pied;
  5.          } catch(e){alert("clearlist==-2 :"+obj)}
  6.       }
  7.       else if(clearlist==-1)
  8.       {
  9.          try{
  10.             document.getElementById(obj).outerHTML=entete+txtselect+txt+pied;
  11.          } catch(e){alert("clearlist==-1 :"+obj)}
  12.       }
  13.       else
  14.       {
  15.          var oOption = document.createElement("OPTION" );
  16.          oOption.text=text;
  17.          oOption.value=id_categorie;
  18.          switch(numCategory)
  19.          {
  20.             case 1:
  21.                document.all.subform1.add(oOption);
  22.                break;
  23.             case 2:
  24.                document.all.subform2.add(oOption);
  25.                break;
  26.             case 3:
  27.                document.all.subform3.add(oOption);
  28.                break;
  29.             case 4:
  30.                document.all.subform4.add(oOption);
  31.                break;
  32.             case 5:
  33.                document.all.subform5.add(oOption);
  34.                break;
  35.             case 6:
  36.                document.all.subform6.add(oOption);
  37.                break;
  38.             case 7:
  39.                document.all.subform7.add(oOption);
  40.                break;
  41.             case 8:
  42.                document.all.subform8.add(oOption);
  43.                break;
  44.             case 9:
  45.                document.all.subform9.add(oOption);
  46.                break;
  47.             case 10:
  48.                document.all.subform10.add(oOption);
  49.                break;
  50.             case 11:
  51.                document.all.subform11.add(oOption);
  52.                break;
  53.             case 12:
  54.                document.all.subform12.add(oOption);
  55.                break;
  56.          }
  57.       }


C'est horrible le derniere  cas hein ?  :love:  
Bref, le comportement n'est pas parfait : parfois, dans le cas clearlist==-2 ou clearlist==-1 j'ai une erreur lancée, comme si l'objet cherché n'existait pas ! (je n'ai aucun soucis avec les 3 lignes pour firefox)
 
De plus, je n'ai pas trouvé de solution pour faire un document.all.VARIABLE.add(oOption); : il prend l'objet variable, et pas la string qu'elle représente, d'ou l'affreux switch case écrit !
 
Donc le résultat : quand l'utilisateur clique sur le premier menu deroulant et choisis une entrée, le second menu déroulant est créé, rempli correctement (le cas numero 3 fonctionne bien). Si je change la selection du premier menu déroulant et que celui efface tout (cas numero 1) ca fonctionne et je peut relancer tout ce que je veut. Par contre si le menu déroulant recrée un nouveau menu, alors j'ai des erreur lancée, mettons que document.all.subform1.add(oOption) renvoi une valeur nulle, comme si subform1 n'existait pas...
Bon enfin ca avance quand meme : avez vous une solution surtout pour eviter ce switch, le reste ca doit etre un bug a moi bien idiot !


---------------
Un blog qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

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