dunque eccomi
come promesso eccoti un esempio funzionante (lo vedi all'opera qui)
Basta porre il listener sul documento e poi muoversi in base a quale elemento si è cliccato.
Ho spostato il codice JS in basso dopo tutto il codice per avere la certezza che sia caricato dopo tutti gli elementi.
Codice HTML:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<style>
:root {
font: 8pt Arial;
}
#tendina {
display: inline-block;
width: 10em;
height: 2em;
background-color: yellow;
cursor: pointer;
}
#lingue {
display: none;
cursor: pointer;
}
</style>
</head>
<body>
<div id="tendina">Lingua: <span id="lingua">it</span></div>
<div id="lingue">
<ul id="scelte">
<li>it</li>
<li>en</li>
</ul>
</div>
<script>
var div_tendina = document.getElementById('tendina');
var div_lingue = document.getElementById('lingue');
var span_lingua = document.getElementById('lingua');
function azione(e) {
if(e.target.getAttribute('id') == 'tendina'){
div_lingue.style.display = 'block';
}else{
div_lingue.style.display = 'none';
}
}
function sellingua(e) {
var lingua = (e.target.innerHTML);
alert('Lingua selezionata: ' + lingua);
span_lingua.innerHTML = lingua;
}
window.onload = function() {
div_lingue.style.display = 'none';
document.addEventListener('click', azione);
div_lingue.addEventListener('click', sellingua);
}
</script>
</body>
</html>
Oppure si potrebbe anche gestire il tutto con la sola funzione "azione" e con un solo listener, gestendo l'oggetto che riceve l'azione (il click), come da pagina visibile qui e che riporto
Naturalmente megli si individua l'elemento più si ha la certezza che non si verifichino interferenze.
Codice HTML:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<style>
:root {
font: 8pt Arial;
}
#tendina {
display: inline-block;
width: 10em;
height: 2em;
background-color: yellow;
cursor: pointer;
}
#lingue {
display: none;
cursor: pointer;
}
</style>
</head>
<body>
<div id="tendina">Lingua: <span id="lingua">it</span></div>
<div id="lingue">
<ul id="scelte">
<li>it</li>
<li>en</li>
</ul>
</div>
<script>
var div_tendina = document.getElementById('tendina');
var div_lingue = document.getElementById('lingue');
var span_lingua = document.getElementById('lingua');
function azione(e) {
if(e.target.getAttribute('id') == 'tendina'){
div_lingue.style.display = 'block';
}else if(e.target.tagName == 'LI') {
var lingua = (e.target.innerHTML);
alert('Lingua selezionata: ' + lingua);
span_lingua.innerHTML = lingua;
div_lingue.style.display = 'none';
}else{
div_lingue.style.display = 'none';
}
}
window.onload = function() {
div_lingue.style.display = 'none';
document.addEventListener('click', azione);
}
</script>
</body>
</html>