Je "crée" ma propre "ComboBox" en utilisant Bootstrap 3
et JavaScript. Here is the JSFiddle
pour ce que j'ai jusqu'à présent:
<div class="input-group">
<input type="TextBox" ID="datebox" Class="form-control"></input>
<div class="input-group-btn">
<button type="button" class="btn dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul id="demolist" class="dropdown-menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
<li><a href="#">C</a></li>
</ul>
</div>
</div>
$(document).on('click', '.dropdown-menu li a', function() {
$('#datebox').val($(this).html());
});
Cette approche fonctionne très bien jusqu'à ce que je veuille répéter ce "ComboBox" plusieurs fois sur la page. Le problème est lié à la fonction JQuery recherchant ANY/ALL '.dropdown-menu li a'
.
Comment puis-je changer mon JQuery pour qu'il recherche uniquement _LU avec un ID demolist _ et obtenir sa valeur sélectionnée?
J'ai essayé ce qui suit sans succès:
J'ai essayé '#demolist .dropdown-menu li a'
mais cela ne déclenchera pas la fonction:
$(document).on('click', '#demolist .dropdown-menu li a', function() {
$('#datebox').val($(this).html());
});
J'ai essayé d'appeler le clic sur #demolist mais #datebox
obtient le code HTML de l'élément de liste de #demolist et non le sélectionné innerHTML de l'élément:
$('#demolist').on('click', function(){
$('#datebox').val($(this).html());
});
Les solutions de travail sont:
$('#demolist li a').on('click', function(){
$('#datebox').val($(this).html());
});
OU
$('#demolist li').on('click', function(){
$('#datebox').val($(this).text());
});
$('#demolist li').on('click', function(){
$('#datebox').val($(this).text());
});
Le sélecteur serait #demolist.dropdown-menu li a
note aucun espace entre id et class ..__ Cependant, je suggérerais une approche plus générique:
<div class="input-group">
<input type="TextBox" Class="form-control datebox"></input>
<div class="input-group-btn">
<button type="button" class="btn dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
<li><a href="#">C</a></li>
</ul>
</div>
$(document).on('click', '.dropdown-menu li a', function() {
$(this).parent().parent().parent().find('.datebox').val($(this).html());
});
en utilisant une classe plutôt que l'id et en utilisant parent().find()
, vous pouvez en afficher autant que vous le souhaitez sur une page, sans duplication
Code de conception utilisant Bootstrap
<div class="dropdown-menu" id="demolist">
<a class="dropdown-item" h ref="#">Cricket</a>
<a class="dropdown-item" href="#">UFC</a>
<a class="dropdown-item" href="#">Football</a>
<a class="dropdown-item" href="#">Basketball</a>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
$('#demolist a').on('click', function () {
var txt= ($(this).text());
alert("Your Favourite Sports is "+txt);
});
});
</script>
Fonctionne très bien.
<input type="text" name="cat_q" id="cat_q">
$(document).ready(function(){
$("#btn_cat div a").click(function(){
alert($(this).text());
});
});
As-tu juste essayé
$('#datebox li a').on('click', function(){
//$('#datebox').val($(this).text());
alert($(this).text());
});
Ça marche pour moi :)
Vous voudrez peut-être modifier un peu votre code jQuery en '#demolist li a'
afin qu'il sélectionne spécifiquement le texte qui se trouve dans le lien plutôt que le texte qui se trouve dans l'élément li. Cela vous permettrait d'avoir un sous-menu sans causer de problèmes. De plus, puisque vous sélectionnez spécifiquement le tag, vous pouvez y accéder avec $(this).text();
.
$('#datebox li a').on('click', function(){
//$('#datebox').val($(this).text());
alert($(this).text());
});