The displayed option text should not have anything to do with your redirect not happening.
Did i understood correctly that the redirect is indeed what is troubleing you? And that you tried safari mobile? if so it doesnt support the onchange, but onblur
echo '<select name="" onblur="location = this.options[this.selectedIndex].value;">';
But this breaks the other browsers i think, so a switch for working browsers and non working ones would be needed to onchange for one and onblur for the other.
EDIT Please see this part, there you have your post title
foreach($children as $child){
//print_r($child);
$permalink = get_permalink($child->ID);
$initial = getInitials($child->post_title);
if($initial!='' && $currval != $initial ) {
$currval = $initial;
echo '<optgroup label="'.$initial.'""></optgroup>';
}
echo '<option value="'.$permalink.'">'.$child->post_title.'</option>';
}
So, use this instead
foreach($children as $child){
//print_r($child);
$permalink = get_permalink($child->ID);
$post_title = strtoupper($child->post_title);
$initial = getInitials($child->post_title);
if($initial!='' && $currval != $initial ) {
$currval = $initial;
echo '<optgroup label="'.$initial.'""></optgroup>';
}
echo '<option value="'.$permalink.'">'.$post_title.'</option>';
}