web-dev-qa-db-fra.com

select2 multi-valeur n'envoyant qu'une seule valeur dans POST

Voici un extrait de mon code: http://jsfiddle.net/natatkinson/xbWEb/

Javascript:

$(document).ready(function () {
    $("#tags").select2({
        maximumSelectionSize: 3
    });

});

HTML:

<form name="form1" id="form1" action="" method="GET">
<fieldset>
    <legend>Shoe Info</legend>
    <dl>    <dt>Name:</dt>

        <dd>
            <input type="text" name="name" id="name" size="40" placeholder="Shoe name" required autofocus>
        </dd>
    </dl>   <dt>Tags:</dt>

    <dd>
        <select multiple="" name="tags" id="tags" style="width:100%;">
            <option value="0">Select Tags</option>
            <option value="2">racing flat</option>
            <option value="3">track spikes</option>
            <option value="1">trainer</option>
        </select>
    </dd>
    </dl>
</fieldset>
<p class="submit-buttons">
    <input type="submit" class="button1" name="submit" id="submit" value="Add Shoes" />
</p>

Tout ce qui est soumis est 1 valeur, pas une liste séparée par des virgules comme le dit la documentation.

31
Nate Atkinson

Vous devez utiliser [] pour le nom du contrôle de formulaire à valeurs multiples. Utilisation correcte en bas:

<select multiple="" name="tags[]" id="tags" style="width:100%;">
80

Je pense que vous ne pouvez pas obtenir directement les données de chaîne de select2, vous devez ajouter une entrée cachée et soumettre la valeur de l'entrée cachée en tant que param.

<input type="hidden" name="tags" id="tags"></input>
<select multiple="" style="width:100%;" onchange="changeSelect(event)">
  <option value="0">Select Tags</option>
  <option value="1">trainer</option>
</select>
function changeSelect(event){
  var select2Value = $(event.target).val();
  $("tags").val(select2Value);
}
2
Frank