Πολύ συχνά στις φόρμες έχουμε select tags με λίγες ή πολλές επιλογές για τον χρήστη που, αν δεν κάνουμε validation της φόρμας με javascript για διάφορους λόγους, μπορεί να κληθεί ο χρήστης να διορθώσει κάποιο λάθος στην φόρμα και θα πρέπει να επιλέξουμε προγραμματιστικά την επιλογή που είχε πριν το submit.
Αν τα options προέρχονται από μια βάση δεδομένων είναι πολύ εύκολο, μέσα από την λούπα της PHP να βάλουμε το selected στην επιλογή που είχε κάνει χρήστης. Αν όμως τα options είναι hard coded τότε θα πρέπει να βάλουμε if...then...else σε κάθε ένα από αυτά και δεν είναι ο καλύτερος τρόπος. Έστω ότι έχουμε την παρακάτω φόρμα (αρχείο test.php):
<form action="test.php" method="post">
<select id="countryCode" name="countryCode">
<option value="">Επιλέξτε χώρα...</option>
<option value="01">Επιλογή 1</option>
<option value="02">Επιλογή 2</option>
<option value="03">Επιλογή 3</option>
<option value="04">Επιλογή 4</option>
<option value="05">Επιλογή 5</option>
<option value="06">Επιλογή 6</option>
<option value="07">Επιλογή 7</option>
</select>
<input type="submit">
</form>
Στο ίδιο αρχείο, θα βάλουμε την ακόλουθη ρουτίνα:
<script type="text/javascript">
var selectedCountry="<?php echo $_POST['countryCode']; ?>";
function checkCountry() {
var s=document.getElementById('countryCode');
if (s) {
var o=s.getElementsByTagName('option');
for (var n=0; n<o.length; n++) {
if (o[n].value==selectedCountry) {
o[n].selected="selected";
}
}
}
}
window.onload=checkCountry; /* αυτό δεν ενδείκνυται,
κανονικά θα έπρεπε να χρησιμοποιήσω
κάποια ρουτίνα addEvent */
</script>
Η ρουτίνα αυτή — σε συνδυασμό με την μεταβλητή selectedCountry που παίρνει την τιμή της επιλογής του χρήστη από το post της φόρμας, ελέγχει τα options του συγκεκριμένου select tag και αν η selectedCountry δεν είναι κενή τότε προσθέτει το selected="selected" στο κατάλληλο option. Nice and easy!






