J'utilise onclick
événement dans la balise d'option pour la boîte select
<select>
<option onclick="check()">one</option>
<option onclick="check()">two</option>
<option onclick="check()">three</option>
</select>`
onclick
l'événement ne fonctionne pas sur IE et Chrome mais il fonctionne bien dans firefox, ici je ne veux pas utiliser onchange
événement sur la balise select bcz, il ne déclenchera pas d'événement si l'utilisateur sélectionne à nouveau la même option
Par exemple: disons que la première fois que l'utilisateur sélectionne "une" liste déroulante, j'ouvrirai une fenêtre contextuelle après avoir traité certaines choses, l'utilisateur ferme la fenêtre contextuelle, supposons que si l'utilisateur souhaite sélectionner la même liste déroulante "un", il ne déclenchera aucun événement. Cela peut être résolu en utilisant l'événement onclick sur la balise option mais ne fonctionne pas sur IE et chrome
Y a-t-il du travail pour cela?
L'événement onclick
sur la balise option
échouera sur la plupart des versions d'IE, Safari et Chrome: référence
Si vous souhaitez déclencher un événement chaque fois que l'utilisateur le sélectionne, pourquoi ne pas simplement utiliser:
<select onclick="check()">
<option>one</option>
<option>two</option>
<option>three</option>
Et si vous voulez faire quelque chose avec l'option spécifique sélectionnée par l'utilisateur:
<select onclick="if (typeof(this.selectedIndex) != 'undefined') check(this.selectedIndex)">
<option>one</option>
<option>two</option>
<option>three</option>
De cette façon, vous êtes assuré d'appeler check()
si et seulement si une option est sélectionnée.
Edit: Comme @ user422543 l'a souligné dans les commentaires, cette solution ne fonctionnera pas dans Firefox. J'ai donc posé une autre question ici: Pourquoi Firefox réagit-il différemment de Webkit et IE pour "cliquer" l'événement sur la balise "select"?
Jusqu'à présent, il semble que l'utilisation de la balise <select>
Ne fonctionnera pas de manière cohérente dans tous les navigateurs. Cependant, si nous simulons un menu de sélection à l'aide d'une bibliothèque telle que menu de sélection jQuery UI ou Chosen pour créer un menu de sélection au lieu d'utiliser la balise <select>
, click
sera déclenché sur la balise <ul>
Ou <li>
Qui est cohérente dans tous les navigateurs que j'ai testés.
J'ai une autre suggestion, ce n'est pas 100%, mais presque:
<select onchange="valueChanged(this.value); this.selectedindex = -1">
<option style="display: none"></option>
<option value="1"> 1 </option>
<option value="2"> 2 </option>
<option value="3"> 3 </option>
<option value="4"> 4 </option>
</select>
De cette façon, l'événement sera déclenché même si l'utilisateur a sélectionné deux fois la même option. L'attelage est que IE affichera l'option vide (il ignore l'attribut style), mais cliquer dessus ne déclenchera pas l'événement, car il commence toujours comme étant sélectionné, et donc le sélectionner ne pas déclencher onchange ...
Cela émule un événement onclick
sur vos option
s en enregistrant le nombre de clics.
Cependant, il ne prend pas en charge l'interaction avec le clavier ....
Oh et j'utilise JQuery, mais vous pouvez le refaire en utilisant du JS pur
Il suffit de
Je l'ai testé et ça marche :).
<script>
selectHandler = {
clickCount : 0,
action : function(select)
{
selectHandler.clickCount++;
if(selectHandler.clickCount%2 == 0)
{
selectedValue = select.options[select.selectedIndex].value;
selectHandler.check(selectedValue);
}
},
blur : function() // needed for proper behaviour
{
if(selectHandler.clickCount%2 != 0)
{
selectHandler.clickCount--;
}
},
check : function(value)
{
// you can customize this
alert('Changed! -> ' + value);
}
}
</script>
<select onclick="selectHandler.action(this)" onblur="selectHandler.blur()">
<option value="value-1"> 1 </option>
<option value="value-2"> 2 </option>
<option value="value-3"> 3 </option>
<option value="value-4"> 4 </option>
</select>
Utilisez function(this)
dans l'ID de la balise de sélection
par exemple
<script type="application/javascript">
var timesSelectClicked = 0;
$(function() {
$(document).on('click keypress', 'select', function (e) {
if (timesSelectClicked == 0)
{
timesSelectClicked += 1;
}
else if (timesSelectClicked == 1)
{
timesSelectClicked = 0;
Prompt($('select option:selected').text());
}
});
});
</script>
J'ai trouvé que ce qui suit fonctionnait pour moi - au lieu d'utiliser sur le clic, utilisez sur le changement par exemple:
jQuery('#element select').on('change', (function() {
//your code here
}));
Ce code ne fonctionne pas dans Google Chrome mais fonctionne dans Mozilla.
<select>
<option value="2" (click)="myFunction($event)">
<div>2</div>
</option>
<option value="5" (click)="myFunction($event)">
<div>5</div>
</option>
<option value="10" (click)="myFunction($event)">
<div>10</div>
</option>
</select>
Cette solution fonctionne dans Chrome et Mozilla. Je n'ai pas testé dans Safari .;
<select (change)="myFunction($event)">
<option value="2">
<div>2</div>
</option>
<option value="5">
<div>5</div>
</option>
<option value="10">
<div>10</div>
</option>
</select>