2009-02-13 16 views
4

Donc si vous avez une zone de liste html, également appelée sélection multiple, et que vous voulez générer une chaîne délimitée par des virgules qui répertorie toutes les valeurs dans cette zone de liste, vous pouvez le faire avec l'exemple suivant. La fonction list_to_string() js est la seule chose importante ici. Vous pouvez jouer avec cette page à http://josh.gourneau.com/sandbox/js/list_to_string.htmlGénérer une chaîne délimitée par des virgules à partir d'éléments dans une zone de liste HTML (sélection multiple) avec Javascript

<html> 
<head> 
    <script> 
    function list_to_string() 
    { 
     var list = document.getElementById('list'); 
     var chkBox = document.getElementById('chk'); 
     var str = document.getElementById('str'); 
     textstring = ""; 
     for(var i = 0; i < list.options.length; ++i){ 
      comma = ","; 
      if (i == (list.options.length)-1){ 
       comma = ""; 
      } 
      textstring = textstring + list[i].value + comma; 
      str.value = textstring; 
     } 

    } 
    </script> 
</head> 
<body> 
    <form> 
     <select name="list" id="list" size="3" multiple="multiple"> 
      <option value="India">India</option> 
      <option value="US">US</option> 
      <option value="Germany">Germany</option> 
     </select> 
     <input type="text" id="str" name="str" /> 
     <br /><br /> 
     <input type="button" id="chk" value="make a string!" name="chk" onclick="list_to_string();"/> 
    </form> 
</body> 
</html> 
+0

Je ne sais pas quelle est la politique sur l'affichage des réponses à vos propres questions. Je voulais juste un moyen de partager ce petit conseil. – Gourneau

+0

et quelle était la question réelle ici? – kender

+0

La dernière fois que j'ai vérifié, répondre à vos propres questions est OK, même encouragé. Cependant, il est préférable de mettre la partie de question dans la question et la partie de réponse dans la réponse :) – Piskvor

Répondre

4

concaténation de chaîne est très lent sur IE, utilisez un tableau à la place:

function listBoxToString(listBox,all) { 
    if (typeof listBox === "string") { 
     listBox = document.getElementById(listBox); 
    } 
    if (!(listBox || listBox.options)) { 
     throw Error("No options"); 
    } 
    var options=[],opt; 
    for (var i=0, l=listBox.options.length; i < l; ++i) { 
     opt = listBox.options[i]; 
     if (all || opt.selected) { 
      options.push(opt.value); 
     } 
    } 
    return options.join(","); 
} 
1

Vous pouvez utiliser Array.join (''); pour créer une liste séparée par des virgules d'un tableau.

Quelque chose comme ça, mais en mieux:

var list_to_string = function() { 
    var opts = document.getElementById('list').options; 
    var i = 0, len = opts.length, a = []; 
    for (i; i<len; i++) { 
     a.push(opts[i].value); 
    } 
    document.getElementById('str').value = a.join(','); 
} 
+1

hasOwnProperty est non portable; utilisez une boucle normale 'for (var i = 0; i bobince

1

Cela peut aussi être fait simplement en utilisant le Request.Form(control.UniqueID) pour tirer les valeurs déjà délimitées par des virgules qui sont déjà présentes pour une zone de liste multisélect.