Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/02/2006, 02:00
Avatar de Amröd
Amröd
 
Fecha de Ingreso: febrero-2006
Mensajes: 9
Antigüedad: 18 años, 10 meses
Puntos: 0
Pues vaya, debe ser bastante mas complicado de lo ya me parecia a mi...

Os adjunto el codigo de una pagina de ejemplo a ver si sirve de ayuda.

Si hay algun otro modo para pasar a mayusculas "on-the-fly" q no tenga nada q ver con esto, tb me vale.

Muchas gracias.

---------------------------------------------

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Prueba</title>

<script>

function stopit(E)
{
E.preventDefault();
}

var caret_pos;
function getCaretPos ()
{
var range = document.selection.createRange();
var bookmark = range.getBookmark();
caret_pos = bookmark.charCodeAt(2) - 2;

window.document.getElementById('pos').value = caret_pos;
}

var tclAcento = 0; // para controlar si la ultima tecla pulsada fue un acento
var tclShift = false; // para controlar si se pulso el shift
function mays (oInput, E)
{
var iKeyCode_a = 65;
var iKeyCode_e = 69;
var iKeyCode_i = 73;
var iKeyCode_o = 79;
var iKeyCode_u = 85;
var iKeyCode_z = 90;
var iKeyCode_ç = 191; //231
var iKeyCode_ñ = 192; //241
if (window.event)
{
var iKeyCode_acento1 = 186; // `^ para IE
} else
{
var iKeyCode_acento1 = 59; // `^ para FF
}
var iKeyCode_acento2 = 222; // ´¨
var arrayAcentosA = [192,194,193,196]; // estan ordenados [`,^,´,¨]
var arrayAcentosE = [200,202,201,203];
var arrayAcentosI = [204,206,205,207];
var arrayAcentosO = [210,212,211,214];
var arrayAcentosU = [217,219,218,220];

if(window.event)
{
var cKeyCodeRecibido = window.event.keyCode; // Caracter recibido IE:
} else if(E.which)
{
var cKeyCodeRecibido = E.which; // Caracter recibido NS:
}

var bCancelarEntrada = false;
var chrMays;

if (cKeyCodeRecibido == iKeyCode_ñ)
{
chrMays = String.fromCharCode(209);
bCancelarEntrada = true;
}
if (cKeyCodeRecibido == iKeyCode_ç)
{
chrMays = String.fromCharCode(199);
bCancelarEntrada = true;
}

if ((iKeyCode_a<=cKeyCodeRecibido)&&(cKeyCodeRecibido <=iKeyCode_z))
{
if (tclAcento!=0)
{ // la ultima tecla fue un acento
if ((cKeyCodeRecibido!=iKeyCode_a)&&(cKeyCodeRecibido !=iKeyCode_e)&&(cKeyCodeRecibido!=iKeyCode_i)&&(cK eyCodeRecibido!=iKeyCode_o)&&(cKeyCodeRecibido!=iK eyCode_u))
{ // entra aqui si no es una vocal
chrMays = String.fromCharCode(cKeyCodeRecibido);
bCancelarEntrada = true;
} else
{ // caso de que la tecla pulsada sea una vocal y la anterior fuera un acento
var arrayAcentosX;
switch (cKeyCodeRecibido)
{ // con este switch escogemos el array donde miraremos el acento
case 65: // A
arrayAcentosX = arrayAcentosA;
break;
case 69: // E
arrayAcentosX = arrayAcentosE;
break;
case 73: // I
arrayAcentosX = arrayAcentosI;
break;
case 79: // O
arrayAcentosX = arrayAcentosO;
break;
case 85: // U
arrayAcentosX = arrayAcentosU;
break;
}
var numElem = 0;
if (tclAcento==222) {numElem+=2} // si el acento era ´ o ¨, sera el elemento 2 o 3.
if (tclShift) {numElem++} // si se pulso la tecla Shift, sera el elemento 1 o 3
chrMays = String.fromCharCode(arrayAcentosX[numElem]);
}
} else
{ // la ultima tecla pulsada no fue un acento
chrMays = String.fromCharCode(cKeyCodeRecibido);
}
bCancelarEntrada = true;
}

if (bCancelarEntrada)
{
if(window.event)
{
window.event.returnValue = false;
} else if(E.which)
{
window.addEventListener("keypress", stopit, false);
setTimeout("window.removeEventListener('keypress', stopit, false)",1); //Solo es para que se ejecute con un poco de retardo, si se ejecuta automáticamente después no hace nada el addEventListener
}
//oInput.value=oInput.value+chrMays; << esto inserta chrMays al final del string
var subStrA = oInput.value.substr(0,caret_pos);
var subStrB = oInput.value.substring(caret_pos, oInput.value.length);
oInput.value = subStrA + chrMays + subStrB;
//alert('char:'+chrMays+' '+cKeyCodeRecibido);
}

if ((cKeyCodeRecibido == iKeyCode_acento2) || (cKeyCodeRecibido == iKeyCode_acento1))
{ // comprobacion acentos
if(window.event)
{
window.event.returnValue = false;
} else if(E.which)
{
window.addEventListener("keypress", stopit, false);
setTimeout("window.removeEventListener('keypress', stopit, false)",1); //Solo es para que se ejecute con un poco de retardo, si se ejecuta automáticamente después no hace nada el addEventListener
}
tclAcento = cKeyCodeRecibido;

var evtObj = window.event? event : E;
if (evtObj.shiftKey)
{ // comprobacion tecla Shift pulsada, solo si se ha pulsado un acento
tclShift = true;
} else
{
tclShift = false;
}

} else
{ // se ha pulsado una tecla que no es un acento y ya ha sido procesada, asi que esta variable debe estar limpia. Lo mismo para el shift
tclAcento = 0;
tclShift = false;
}

// la siguiente linea es solo para el ejemplo
window.document.getElementById('code').value = cKeyCodeRecibido;
}

</script>

</head>

<body style="background-color:#CCFFCC">
<form>

<div>
Pasar a mayusculas [mays()] <input type="text" onKeyDown="mays(this,event)" onmouseup="getCaretPos(this, event)" onkeyup="getCaretPos(this, event)"/> - <input id="code" type="text" tabindex="2" size="4"> keyCode de la tecla pulsada
</div>
<div>
Posicion del cursor&nbsp;<input id="pos" size="4">
</div>

</form>
</body>
</html>