Humph si quelqu'un a une solution plus jolie, je suis preneur

Au final, c'est arrayinfos[repas][variante][composante] que je veux tester, mais:

  1. typeof(arrayinfos[repas][variante][composante]) != 'undefined')

sort en erreur si arrayinfos[repas][variante] n'est pas défini.

Du coup:

  1. function setSelect(composante,variante,repas,arrayinfos)
  2. {
  3. var html='<select onChange="setplat(this.value,\'' + repas + '\',\'' + composante + '\',\'' + variante + '\');"><option value=""></option>';
  4. for (var i in childsof[variante])
  5. {
  6. if (typeof(childsof[composante])!= 'undefined')
  7. {
  8. if (childsof[composante].indexOf(childsof[variante][i]) > -1)
  9. {
  10. var option='<option value="' + childsof[variante][i] + '">' + elem['plat'][childsof[variante][i]] + '</option>';
  11. if (typeof(arrayinfos[repas]) != 'undefined')
  12. {
  13. if (typeof(arrayinfos[repas][variante]) != 'undefined')
  14. {
  15. if (typeof(arrayinfos[repas][variante][composante]) != 'undefined')
  16. {
  17. //alert('plop' + childsof[variante][i]);
  18. if (arrayinfos[repas][variante][composante]==childsof[variante][i])
  19. {option ='<option value="' + childsof[variante][i] + '" selected="selected">' + elem['plat'][childsof[variante][i]] + '</option>';}
  20. }
  21. }
  22. }
  23. html= html + option;
  24.  
  25. }
  26. }
  27. }
  28. html=html+'</select>';
  29. return html;
  30. }

Tabulation PowA!!! Il y a moyen de faire mieux non?

EDIT Merci zigazou, qui m'oriente vers try catch dans les commentaires.... plus simple en effet:

  1. function setSelect(composante,variante,repas,arrayinfos)
  2. {
  3. var html='<select onChange="setplat(this.value,\'' + repas + '\',\'' + composante + '\',\'' + variante + '\');"><option value=""></option>';
  4. for (var i in childsof[variante])
  5. {
  6. var option='';
  7. try{
  8. if (childsof[composante].indexOf(childsof[variante][i]) > -1){
  9. try{
  10. if (arrayinfos[repas][variante][composante]==childsof[variante][i])
  11. {option ='<option value="' + childsof[variante][i] + '" selected="selected">' + elem['plat'][childsof[variante][i]] + '</option>';}
  12. }catch(err){option ='<option value="' + childsof[variante][i] + '">' + elem['plat'][childsof[variante][i]] + '</option>';}
  13. }
  14. }catch(err){option='';}
  15. html= html + option;
  16. }
  17.  
  18. html=html+'</select>';
  19. return html;
  20. }

Commentaires

1. Le vendredi, juin 3 2011, 23:11 par zigazou

Hello Grouik !

Connais-tu la construction try…catch… de JavaScript ?
Et l’opérateur booléen and ?

Je pense que ça te permettrait de faire déjà quelques réductions.

Ensuite, ce n’est pas évident de te proposer une simplification du code quand on ne connaît pas les structures que tu manipules ;-)

2. Le samedi, juin 4 2011, 08:57 par gnieark

yeah merci, je m'oriente vers try catch. Je me documente là dessus

La structure que je manipule c'est là http://test.tinad.fr/index.php?menu... suer test pwd test

3. Le samedi, juin 4 2011, 09:04 par gnieark

PS Pour le AND...

Un truc du genre
if ((typeof(variable!='undefined')) && (variable=="plop")){.....}

Si variable n'est pas définie ça sort en erreur en js contrairement au php

Page top