Tänkte göra ett litet skript som skulle se till att en viss <select> är disabled tills en annan <select> får ett värde. Såhär:
javascript:
window.onload=function() {
var r = document.getElementById("month");
r.setAttribute("disabled","disabled");
var s = document.getElementById("year");
s.addEventListener("change", ena(), false);
}
function ena() {
var s = document.getElementById("year");
var r = document.getElementById("month");
if (s.value != "") {
r.removeAttribute("disabled")
} else {
r.setAttribute("disabled","disabled");
}
}
Det fungerade inte helt bra.
Har några frågor.
Händelsen change är en HTMLevent . Stöder alla läsare det? Ska man testa det innan man kör skriptet?
Mina variabler, hur definierar jag dem globalt så att jag kommer åt dem i båda funktionerna.?
Varför fungerar det så dåligt? Min eventlistener verkar inte anropas när jag ändrar selecten för år. Ska jag förresten definiera den utanför window.onload? Testade det och den anropas inte som den ska ändå.
Hoppas någon kan reda ut det här för mig. Inte särskilt van vid DOM och javascript.
<script type="text/javascript">
// Genom att deklarera variablerna utanför någon funktion görs de globala
var r, s;
window.onload=function() {
r = document.getElementById("month");
r.disabled = true; // disabled är av typen Boolean
s = document.getElementById("year");
s.onchange = ena; // Se till att funktionen ena körs vid onchange
}
function ena() {
r.disabled = !Boolean(s.selectedIndex);
}
</script>
Eftersom stödet för DOM-metoderna setAttribute och addEventListener inte är de bästa ser jag inget fel i att undvika dem när det finns fullgoda alternativ.
OK. Så om jag inte hade satt selected som attribut på en option (den med index 0) hade det blivit true i början (om ingen är vald ska index tydligen vara -1). MEn det kvittar ju nu.
288 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2