Este último no tiene el problema de los bisiestos. Lo único que deberías hacer es validar dentro del while que e no supere, por ejemplo, el valor 110 (no sé cuál es el record de longevidad, pero creo que es un buen número) porque si alguien coloca un año muy bajo puede hacerse muy lento:
Código PHP:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>
<body>
<form name="form1" id="form1">
<select name="dianac" id="dianac" size="1">
<option value="1">01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
<option value="9">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select name="mesnac" id="mesnac" size="1">
<option value="0">Enero</option>
<option value="1">Febrero</option>
<option value="2">Marzo</option>
<option value="3">Abril</option>
<option value="4">Mayo</option>
<option value="5">Junio</option>
<option value="6">Julio</option>
<option value="7">Agosto</option>
<option value="8">Setiembre</option>
<option value="9">Octubre</option>
<option value="10">Novienbre</option>
<option value="11">Diciembre</option>
</select>
<input name="anonac" id="anonac" type="text" size="5" maxlength="4"
onkeyup=
"if(isNaN(this.value)){this.value=this.value.substring(0,this.value.length-1)}">
<input name="edad" type="text" size="5" id="edad"
onfocus="var y=anonac.value,e=0;while(new Date(++y,mesnac.value,dianac.value)<new Date()){if(e>110){alert('el año es incorrecto');return this.value='';}e++;}this.value=e">
</form>
</body>
</html>