2017-08-01 1 views
-1

J'ai un élément Select2 et un élément d'entrée comme suit ...Select2 ajouter/mise à jour sur le changement d'entrée

Label: <input class="default-ele" type="text"/> 
<select class="some-select"> 
    <option>-- None --</option> 
</select> 

et certains JS/JQuery comme suit ...

$(document).ready(function() { 

    $(`.${type}-default`).select2({ 
    theme: 'bootstrap' 
    }); 

    $(document).on('change', '.default-ele', function() { 
    var newVal = $(this).val(); 
    var selAdd = new Option(newVal, newVal); 
    $('.some-select').append(selAdd).trigger('change'); 
    }); 

}); 

Que tous fonctionne sauf que si vous entrez une valeur dans l'entrée puis cliquez sur la sélection avec le curseur toujours dans l'entrée, la valeur n'est pas là jusqu'à ce que vous déplacez le focus loin de la sélection et de nouveau à elle. Existe-t-il un délai d'expiration ou un autre moyen d'afficher la valeur lorsque vous cliquez immédiatement sur la sélection après que l'entrée a été modifiée?

TIA

+0

Utilisez les événements fournis par le plug-in et transmettez-les via les options lorsque vous initialisez votre liste déroulante select2. Voir https://select2.github.io/options.html#events – kyle

+0

pourquoi ne pas avoir un bouton pour l'ajouter à la liste déroulante? –

+0

c'est dynamique (j'ai coupé une partie du code pour la brièveté). Un but est la convivialité et la minimisation des clics. De plus, le select est déjà initialisé au moment où la valeur est entrée. –

Répondre

1

Je suggère d'utiliser pour déclencher pression de touche « select » de fonction d'actualisation.

Quelque chose comme ci-dessous.

Ceci devrait mettre à jour le rappel de déclenchement sur l'entrée dès que vous soulevez la touche.

$(document).ready(function() { 

    $(`.${type}-default`).select2({ 
    theme: 'bootstrap' 
    }); 

    $(document).on('keyup', '.default-ele', function() { 
    var newVal = $(this).val(); 
    var selAdd = new Option(newVal, newVal); 
    $('.some-select').append(selAdd).trigger('change'); 
    }); 

}); 

Mark comme une réponse si elle aide.

+0

Merci beaucoup, cela semble fonctionner, donc je vais accepter, et voter, mais il semble que cela puisse affecter les performances globales et il semble toujours que l'événement de changement devrait se déclencher AVANT que la sélection se déroule indépendamment - mais apparemment, il ne ;-( –