Al final me hicieron dudar.
Sí, por supuesto, lo de poner
elemento.readOnly = false; es evidente, así se debería hacer en vez de borrar y reescribir el atributo con sus valores. Y no quiero ser mal pensado, pero temo saber de donde viene eso. Por eso lo dejé aclarado en mi ejemplo.
Con respecto a lo otro; funciona en todos, pero no en todos los casos.
Dejo la versión "final", que me falta probar en IE, pero supongo que si son los inventores del engendro, lo tienen que aceptar en todas las versiones.
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<script type="text/javascript">
function bravo(){
document.getElementById("alfa").removeAttribute('readonly', false);
//document.getElementById("alfa").readOnly = false;
}
function charly(){
document.getElementById("alfa").setAttribute('readonly', 'readonly', false);
//document.getElementById("alfa").readOnly = true;
}
</script>
</head>
<body>
<input readonly id=alfa value="QWERTY">
<input type=button onclick=bravo() value="sin readonly">
<input type=button onclick=charly() value="con readonly">
</body>
</html>