select2 allowClear pas activé lorsque les options de définir dynamiquement
Quand je créer select2 des listes déroulantes qui sont dynamiquement entraînée par la sélection dans un autre select2 liste déroulante, les allowClear
bouton pour la mise à jour de liste déroulante devient invalide.
Il ne semble pas à la matière si je construis select2 sur un select
, détruire, mettre à jour le code html, et de le reconstruire:
var enableSelect2 = function () {
$(this).select2({
width: '200px',
allowClear: true,
minimumResultsForSearch: 7,
formatResult: function (result, container, query, escapeMarkup) {
var markup = [];
markMatchedSelect2Text(result.text, query.term, markup, escapeMarkup);
return markup.join('');
}
});
},
populateDropdown = function () {
var filterBy = this.id,
t = $(this);
$.ajax({
type: 'post',
url: '/search/get' + (filterBy === 'panel_id' ? 'Isps' : 'Packages') + '/' + t.val(),
success: function (data) {
var toRebuild,
target;
if (filterBy === 'panel_id') {
toRebuild = $('#isp_id, #package_id');
target = $('#isp_id');
} else {
toRebuild = $('#package_id');
target = $('#package_id');
}
toRebuild.each(function () {
$(this).select2('destroy');
});
target.html(data);
if (filterBy === 'panel_id') {
$('#package_id').html($(document.createElement('option')).attr('value', 0).text('Select ISP first\u2026'));
}
toRebuild.each(enableSelect2);
}
});
};
$('body').on('change', '#searchForm #isp_id, #searchForm #panel_id', populateDropdown);
Ou si j'utilise JSON avec un caché entrée:
$(function() {
var data = [
[{id:0,text:'black'},{id:1,text:'blue'}],
[{id:0,text:'9'},{id:1,text:'10'}]
];
$('#attribute').select2({allowClear: true}).on('change', function() {
$('#value').removeClass('select2-offscreen').select2({data:data[$(this).val()],allowClear: true});
}).trigger('change');
});
http://jsfiddle.net/eGXPe/116/
Des idées pourquoi le bouton effacer disparaît?
Edit:
Excuses que je n'ai pas préciser ma html. Dans mon code, chaque select
a un data-placeholder
attribut. Ce n'est pas dans le violon, j'ai fourni, comme il n'était pas à l'origine de mon violon, mais emprunté à un autre DONC, la question. J'ai maintenant mis à jour que de jouer avec des données à espace réservé, et ça fonctionne: http://jsfiddle.net/eGXPe/119/.
Ici est le rameau code de mon html, je n'ai pas auparavant comprennent:
<li>
<label for="edit[panel_id]" class="hidden">Edit Panel ID?</label>
<input type="checkbox" id="edit[panel_id]" name="edit[panel_id]" />
<label for="panel_id">Panel:</label>
<select id="panel_id" name="panel_id" data-placeholder="Select a panel">
<option></option>
{% for panel in related.panel_id %}
<option value="{{ panel.value }}">{{ panel.name }}</option>
{% endfor %}
</select>
</li>
<li>
<label for="edit[isp_id]" class="hidden">Edit ISP ID?</label>
<input type="checkbox" id="edit[isp_id]" name="edit[isp_id]" />
<label for="isp_id">ISP:</label>
<select id="isp_id" name="isp_id" data-placeholder="Select an ISP">
<option></option>
{% for isp in related.isp_id %}
<option value="{{ isp.value }}">{{ isp.name }}</option>
{% endfor %}
</select>
</li>
<li>
<label for="edit[package_id]" class="hidden">Edit Package ID?</label>
<input type="checkbox" id="edit[package_id]" name="edit[package_id]" />
<label for="package_id">Package:</label>
<select id="package_id" name="package_id" data-placeholder="Select a package">
<option></option>
<option value="0">Select ISP first…</option>
</select>
</li>
- N'arrive pas à trouver le "allowClear" dans votre code HTML, de toute façon?
- c'est dans le
enableSelect2
méthode. - pas besoin d'être faux. Je n'ai pas fourni le code HTML, mais chacune de mes listes déroulantes a
data-placeholder="placeholder text"
. - Il n'y a pas d'espace réservé n'importe où dans votre violon.
- Je suis conscient de cela. Je n'ai pas créer de violon et a négligé d'ajouter un espace réservé quand j'ai ajouté
allowClear
option. Je suis la fixation de maintenant. Cependant, je peux vous assurer que mon html adata-placeholder
, encoreallowClear
ne fonctionne pas. Je vais poster html peu de temps.
Vous devez vous connecter pour publier un commentaire.
Comme indiqué dans la doc,
allowClear
besoin d'unplaceholder
etplaceholder
besoin d'un correspondantoption
valeur (qui ne peut pas être une chaîne vide, mais peut être en un seul espace).--
De sorte que votre code doit être quelque chose comme ceci :
http://jsfiddle.net/eGXPe/118/
data-placeholder
attribut, mais le vide<option></option>
. J'ai eu une option de texte et sans aucune valeur, mais ce n'était pas assez bon. Merci pour votre réponse.'Select2: Le
allowClear
option doit être utilisée en combinaison' +"avec la
placeholder
option.'