2017-04-15 1 views
0

J'ai créé une liste déroulante d'éléments de sélection en HTML. La balise select a trois options. Un événement JS "onclick" est attaché à la balise select. En JavaScript, j'ai une fonction correspondante qui alerte l'utilisateur si et seulement si la première option a été sélectionnée. Voici un JSFiddle avec mon code.Répondre à Onclick dans un élément HTML <select>

https://jsfiddle.net/TempusF/rad11vgx/12/

Le problème que j'ai est que, sur Firefox pour Mac, cette alerte ne sera affiché que si vous sélectionnez d'abord une autre option. C'est-à-dire que si la page se charge et que "Zone 1" est affiché, cliquer une seconde fois sur Zone 1 ne déclenchera pas l'alerte. Vous devez cliquer sur Zone 2 ou Zone 3, puis sur Retour à Zone 1 pour recevoir l'alerte. Toutefois, sur Firefox pour Windows, tout clic sur l'option Zone 1 affichera l'alerte. Cela m'amène à croire que j'utilise incorrectement l'événement onclick lorsqu'un événement différent est plus idiomatique. Peut-être l'attente est que j'ai un bouton en dessous de l'élément de sélection qui déclenche la fonction d'alerte, différant ainsi l'exécution. Cependant, je voudrais créer une interface qui réagit immédiatement lorsqu'une option de sélection a été choisie.

Voici le code HTML:

<select id="zoneSelect" onclick="updateChar();"> 
    <option value="zone1">Zone 1</option> 
    <option value="zone2">Zone 2</option> 
    <option value="zone3">Zone 3</option> 
</select> 

Voici le ECMAScript.

function updateChar() { 

    var zone = document.getElementById("zoneSelect"); 

    if (zone.value == "zone1"){ 

     alert("You clicked Zone 1."); 
    } 
} 

Répondre

0

Vous ne devriez pas utiliser onclick en html moderne, mais vous pouvez essayer ce qui suit:

onchange="updateChar(); 

Mieux encore, vous devez définir le gestionnaire d'événements dans le code de démarrage. En tout cas, c'est toujours l'événement change.

Aussi, je recommande un menu déroulant commence par une valeur nulle sans danger, de sorte que vous ne pas par défaut à la première valeur - à moins, bien sûr, c'est l'intention:

<option value="">Choose one …</option> 
+0

Si J'utilise onchange, et Zone 1 est la première sélection, alors le navigateur n'enregistre pas un changement, correct? – TempusFuu

+0

En outre, existe-t-il une liste d'événements javascript qui devraient être abandonnés? Je suis nouveau à JS, et c'est la première fois que j'ai été informé de ne pas utiliser certains événements. – TempusFuu

+0

@TempusFuu C'est vrai. C'est une raison pour commencer avec un vide. L'ajout d'un gestionnaire d'événement 'click' pourrait aider, mais cela compliquerait les choses avec un véritable 'changement'. En ce qui concerne JavaScript obsolète, une très bonne source est https://developer.mozilla.org/en-US/docs/Web/JavaScript – Manngo