| |||
Saber la posicion del cursor en un texto Hola a todos, resulta que tengo una duda... como puedo saber la posicion del cursor en un texto y volverlo a posicionar. por ejemplo: si tengo una caja de texto con la palabra "cajas" y el cursor lo tengo en la palabra j, quisiera que me devolviera la posicion por ejemplo 3 y despues volver a posicionar el cursor en esa posicion... espero y sea posible.. de antemano gracias |
| |||
Respuesta al Cursor Hola a Todos, pues resulta que hace como 2 semanas anduve batallando con saber la posicion del cursor, y despues de haber buscado en muchos foros, no encontre la respuesta, aqui les va la solucion. <html> <head> <title>Untitled</title> <script language="JavaScript"> function getPosCaret(input) { var range = document.selection.createRange(); var range2 = input.createTextRange(); range2.collapse(true); range2.moveEnd('character', 0); range2.setEndPoint('EndToStart', range); distancia=range2.text.length pos_final=parseFloat(input.value.length)- parseFloat(distancia) range2.move('character', pos_final) return pos_final; } </script> </head> <body> <form name="formulario"> <input type="text" name="txt_cursor" value="123456" onkeypress="alert(getPosCaret(this))" style="text-align='right'"> </form> </body> </html> lo que hago es crear 2 rangos, una la posicion donde se encuentra actualmente y el otro inicializo al final y despues veo la distrancia entre los con setEndPoint. Espero a alguien le sirva.... Aclaracion, no se si funcione en otron navegador que no sea IE, ni me interesa, para que luego no me anden criticando |
| ||||
Hola Davhira: No sé si te interesa que valga en otros navegadores, pero he referenciado esta página en muchas ocasiones: http://www.pepemolina.com/editor/index.html Creo que te puede interesar. Saludos
__________________ Por favor: No hagan preguntas de temas de foros en mensajes privados... no las respondo |
| |||
Muy buen Editor Hola Caricatos esta padre el editor, la posicion del cursor la necesitaba porque estaba haciendo un edit mask con formato de $ y decimales y al quitarle el formato se me perdia el cursor o el numero insertado. De hecho tambien hice varias preguntas sobre el mask les envio el codigo del edit-mask <html><head> <script language="JavaScript"> function getPosCaret(input) { //creamos 2 rangos, uno donde este el cursor actualmente var range = document.selection.createRange(); var range2 = input.createTextRange(); range2.collapse(true); //se establece la posicion del segundo cursor range2.moveEnd('character', 0); range2.setEndPoint('EndToStart', range); //se saca la distancia donde esta el cursor distancia=range2.text.length //se enconvierte la posicion de derecha a izquierda pos_final=parseFloat(input.value.length)- parseFloat(distancia) range2.move('character', pos_final) //coloca el cursor despues del punto if (pos_final==0) pos_final=3 return pos_final; } function juntos_miles_caret(txt_campo) { var rango=txt_campo.createTextRange(); var range = document.selection.createRange(); //si hay seleccion se pasara a la variable cuando_sele cuando_sele=range.text seleccion_final=range.text.length posicion_ini=getPosCaret(txt_campo) //si el value empieza con punto,guion o parentesis lo sustituye if (txt_campo.value.charAt(0)=='.' || txt_campo.value.charAt(0)=='-'|| txt_campo.value.charAt(0)=='(') txt_campo.value='$0.00' txt_campo.value=format_currency(txt_campo.value); rango.collapse(true); valor=txt_campo.value.length-posicion_ini //coloca el cursor en el siguiente decimal if (valor>=txt_campo.value.length-2 && cuando_sele=='') valor+=1 rango.move('character',valor) rango.select(); //detecta que se presiono la tecla punto y la coloca detras if (event.keyCode==190 || event.keyCode==110) cursorPunto(txt_campo,1) //parte para que permita seleccionar, solo entra si hay seleccion if (cuando_sele!='') { //se saca la posicion donde se dejo de seleccionar pos_final=getPosCaret(txt_campo) pos_fin=valor+seleccion_final pos_ini=txt_campo.value.length-pos_final rango=txt_campo.createTextRange(); rango.collapse(true); //se coloca las posiciones rango.moveEnd('character', pos_fin); rango.moveStart('character', pos_ini); rango.select(); } } function cursorPunto(txt_campo, posicion) { //si no se le asigna posicion por default es antes del punto AQUI.00 (posicion==undefined)?posicion=0:null rango=txt_campo.createTextRange(); longitud=txt_campo.value.length valor=String(txt_campo.value) //busca el primer punto mientras que el contador aumenta(posicion) for (i=0;i<longitud;i++) { (valor.charAt(i)=='.')?i=longitud:posicion++; } rango.move('character',posicion) rango.select(); } function format_currency(cant) { cant=unformat_currency(cant) var temp, temp1, temp2, strng, cifras, inic if (cant<0) { inic='$-' cant=cant*-1 } else { inic='$' } strng='' cifras=Math.round((cant-(Math.floor(cant)))*100) cant=Math.floor(cant) if (cifras<10) { cifras='0'+String(cifras) } while (cant>=1000) { temp=cant/1000 temp1=Math.floor(temp) temp2=temp-temp1 cant=Math.floor(cant/1000) temp2=Math.round(temp2*1000) if (temp2<10) { temp2='0'+'0'+String(temp2) } else { if (temp2<100) { temp2='0'+String(temp2) } else { temp2=String(temp2) } } strng=','+temp2+strng } strng=inic+cant+strng+'.'+cifras return strng; } function unformat_currency(strng) { validos="0123456789-(."; var strng_new=''; punto=false; for (var s=0; s<strng.length; s++) { if (!(validos.indexOf(strng.charAt(s))==-1)) { // lo siguiente es necesario porque hay algunos sistemas operativos que ponen parentesis para las cantidades negativas if (strng.charAt(s)=='(') { strng_new=strng_new+'-' } else if ( (strng.charAt(s)!='.') || ((strng.charAt(s)=='.') && !punto) ) { strng_new=strng_new+String(strng.charAt(s)) } (strng.charAt(s)=='.')?punto=true:null; } } return strng_new; } function textboxSelect(oTextbox) { var oRange = oTextbox.createTextRange(); oRange.moveStart("character", 0); oRange.moveEnd("character", oTextbox.value.length-1); oRange.select(); } </script> </head> <body> <form name="formulario"> Precio:<input name="enteros" type="text" onkeyup="juntos_miles_caret(this)" onBlur="this.value=format_currency(this.value);" size="15" maxlength="15" onfocus="bag=false;textboxSelect(this)" style="text-align:'right'" value="$123.55" onkeypress="(event.keyCode==8)?this.fireEvent('onk eyup'):null;(event.keyCode==35)?keycode=0:null;"> </form> </body> </html> |