Foros del Web » Programando para Internet » Javascript »

Fijar valor en textbox

Estas en el tema de Fijar valor en textbox en el foro de Javascript en Foros del Web. Hola Ayer estuve montando un autocomplete con ajax, ningún problema. El problema me ha venido cuando selecciono una de las opciones con las teclas de ...
  #1 (permalink)  
Antiguo 28/07/2009, 04:46
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Fijar valor en textbox

Hola

Ayer estuve montando un autocomplete con ajax, ningún problema. El problema me ha venido cuando selecciono una de las opciones con las teclas de arriba o abajo y presiono enter. En ese caso se rellena el campo de texto con la opción elegida, pero se borra instantaneamente

Esto es lo que tengo hecho

Código javascript:
Ver original
  1. valorTxt: function (ev) {
  2. var obj = document.getElementById("cont")
  3. var ref = obj.getElementsByTagName('DIV');
  4. var kCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  5.  
  6. if (kCode == 13) { //enter
  7.     for (var i = 0; i <= ref.length-1; i++) {
  8.         if (ref[i].className == "seleccionado") {
  9.             document.getElementById("txt").value = ref[i].id;
  10.             alert(ref[i].id);
  11.                     obj.style.display= "none";
  12.     break;
  13.         }
  14.     }
  15. }    
  16. }

¿Qué he de hacer para que el valor se quede fijado?

Ahora escribiendo esto se me ocurre que tal vez usando while .... lo probaré a ver si resulta

Se agradece cualquier ayuda

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #2 (permalink)  
Antiguo 28/07/2009, 14:12
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Fijar valor en textbox

podrias poner un enlace donde pueda comprobar tu aplicacion? necesito ver como se produce el error. te adelanto que si usas jquery u otra libreria no voy a poder ayudarte porque yo no trabajo con librerias.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 28/07/2009, 14:45
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Fijar valor en textbox

Hola

Ahora mismo no tengo acceso a mi serve por problemas técnicos, así que te he montado el script para solo tengas que copiarlo, alguna función la he deshabilitado para que te funcione. Pruebalo en FF, no se como se comporta en IE

Código javascript:
Ver original
  1. <html xmlns="http://www.w3.org/1999/xhtml"lang="es" xml:lang="es">
  2. <head>
  3. <STYLE TYPE="text/css">
  4. #contenedor div.seleccionado {font-weight:bold; background:#F0F0F0; color:#FF6600;}
  5. #contenedor div.deseleccionado {background:#FFFFFF; color:#000000;}
  6. #contenedor div{font:11px verdana; color:#000000; cursor:pointer; text-align:left; padding:2px 5px;}
  7.  
  8. .capa {
  9. background: #FFFFFF;
  10. border:1px solid rgb(120,120,120);
  11. width: 144px;
  12. _width: 146px;
  13. text-align: left;
  14. position: absolute;
  15. top: 30px;
  16. _top:38px;
  17. left: 117px;
  18. _left: 119px;
  19. }
  20. </STYLE>
  21. <script type="text/javascript">
  22. var SelUsuario = {
  23.  
  24. Evento: function (elemento,nomevento,funcion) {
  25.   if (elemento.attachEvent)
  26.   {
  27.       var f=function(){
  28.         funcion.call(elemento,window.event);
  29.     }
  30.     elemento.attachEvent('on'+nomevento,f);
  31.     return true;
  32.   }
  33.   else  
  34.     if (elemento.addEventListener)
  35.     {
  36.       elemento.addEventListener(nomevento,funcion,false);
  37.       return true;
  38.     }
  39.     else
  40.       return false;
  41. },
  42.  
  43.  
  44.  
  45. init: function(){
  46. var elem1 = document.getElementById("txt");
  47. var elem2 = document.getElementById("contenedor");
  48.         SelUsuario.Evento(elem1, 'keyup', SelUsuario.Empieza);
  49.         SelUsuario.Evento(elem2, 'mouseover', SelUsuario.Seleccionar);
  50.         SelUsuario.Evento(elem1, 'keydown', SelUsuario.Pegar2);
  51.         //SelUsuario.Evento(window, 'click', SelUsuario.Cerrar);
  52.     },
  53.  
  54.  
  55.  
  56.  
  57. creaAjax: function (){
  58.     var ajaxs = ["Msxml2.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLH TTP.5.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];
  59.     var ajax = false;
  60.     for(var i=0 ; !ajax && i<ajaxs.length ; i++){
  61.         try{
  62.             ajax = new ActiveXObject(ajaxs[i]);   // Internet Explorer
  63.         }
  64.         catch(e) {
  65.             ajax = false;
  66.         }
  67.     }
  68.     if(!ajax && typeof XMLHttpRequest!='undefined') {
  69.         ajax = new XMLHttpRequest();  // Firefox, Opera 8.0+, Safari
  70.     }
  71.     return ajax;
  72. },
  73.  
  74.  
  75.  
  76. Empieza: function (ev) {
  77. var str = document.getElementById("txt").value;
  78. var obj = document.getElementById("contenedor");
  79. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  80.  
  81.  if (keyCode == 40) {
  82. //alert("flecha abajo")
  83.     SelUsuario.BajaOpt ()
  84.  } else if (keyCode == 38) {
  85. //alert("flecha arriba")
  86.     SelUsuario.SubeOpt ()
  87.  
  88. } else {
  89.  
  90.  
  91.  
  92.  
  93. //var str = document.getElementById("txt").value;
  94. //var obj = document.getElementById("contenedor");
  95.     if (str.length < 2) {
  96.         //obj.innerHTML = "";
  97.         if (obj.style.display == "none")  obj.style.display= "none";
  98.                 else obj.style.display= "none";
  99.         return;
  100.     }
  101.     ajax = SelUsuario.creaAjax()
  102.     if (ajax==null) {
  103.         alert ("Tu navegador no soporta Ajax");
  104.         return;
  105.      }
  106. var url="SelecUsuarios.asp?q="+escape(str);
  107.     ajax.open("GET",url,true);
  108.     ajax.onreadystatechange = SelUsuario.Despliega;
  109.     //ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  110.             ajax.send(null);
  111.             return
  112. }
  113. },
  114.  
  115.  
  116. Despliega: function () {
  117. var obj = document.getElementById("contenedor");
  118.     if (ajax.readyState==4) {
  119.         if (ajax.status==200) {
  120.             obj.innerHTML = unescape(ajax.responseText);
  121.  
  122.             }else {
  123.  
  124.                                     alert ("Error: " + ajax.status);
  125.             return;
  126.         }
  127.     if (obj.style.display == "none")  obj.style.display= "block";
  128.     }
  129. },
  130.  
  131.  
  132.  
  133. Seleccionar: function () {
  134. var ref = document.getElementById(this.id).getElementsByTagName('DIV');
  135. //alert(ref);
  136. for (var i = 0; i < ref.length; i++) {
  137.  
  138. SelUsuario.Evento(ref[i], 'click', function() {
  139. SelUsuario.Pegar(this.id);
  140. //alert(this.id);
  141. })  
  142.  
  143.  
  144. SelUsuario.Evento(ref[i], 'mouseover',  function() {
  145. SelUsuario.Marcar(this.id);
  146. })
  147.  
  148. //SelUsuario.Evento(ref[i], 'mouseout',  function() {
  149. //SelUsuario.DesMarcar(this.id);
  150. //})
  151. }
  152. },
  153.  
  154.  
  155.  
  156. Pegar: function (valor) {
  157. //alert("el val " +valor);
  158. var obj = document.getElementById("contenedor")
  159.         document.getElementById("txt").value = valor;
  160.                 obj.style.display= "none";     
  161. },
  162.  
  163.  
  164. Pegar2: function (ev) {
  165. var obj = document.getElementById("contenedor")
  166. var ref = obj.getElementsByTagName('DIV');
  167. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  168.  
  169. // enter 13 tab 9
  170. if (keyCode == 13) {
  171. //alert("enter")
  172.  
  173. for (var i = 0; i <= ref.length-1; i++) {
  174. if (ref[i].className == "seleccionado") {
  175.  
  176.         document.getElementById("txt").value = ref[i].id;
  177. break;
  178. alert(ref[i].id);
  179.  
  180.                 obj.style.display= "none";
  181.  
  182. }
  183.  
  184. }
  185.  
  186. } else if (keyCode == 9) {
  187. alert("Tab")
  188. }  
  189. },
  190.  
  191.  
  192.  
  193.  
  194.  
  195. BajaOpt: function() {
  196. var ref = document.getElementById("contenedor").getElementsByTagName('DIV');
  197. for (var i = 0; i <= ref.length-1; i++) {
  198. if (ref[i].className == "seleccionado") {
  199. ref[i].className = "deseleccionado";
  200. if (i < ref.length-1){
  201. i++;
  202. }else{
  203. i = 0;
  204. }
  205. //alert("Largo: " +(ref.length-1)+ " Valor: " +i);
  206. ref[i].className = "seleccionado"
  207. }
  208. }
  209. },
  210.  
  211.  
  212. SubeOpt: function() {
  213. var ref = document.getElementById("contenedor").getElementsByTagName('DIV');
  214. for (var i = 0; i <= ref.length-1; i++) {
  215. if (ref[i].className == "seleccionado") {
  216. ref[i].className = "deseleccionado";
  217. if (i < ref.length && i > 0){
  218. i--;
  219. }else{
  220. i = ref.length-1;
  221. }
  222. //alert("Largo: " +(ref.length-1)+ " Valor: " +i);
  223. ref[i].className = "seleccionado"
  224. }
  225. }
  226. },
  227.  
  228.  
  229. Marcar: function (id) {
  230. var selecionado = document.getElementById(id);
  231. var ref = document.getElementById("contenedor").getElementsByTagName('DIV');
  232. for (var i = 0; i <= ref.length-1; i++) {
  233. if (ref[i].id != id) {
  234. ref[i].className = "deseleccionado";
  235. selecionado.className = "seleccionado";
  236. }
  237. }
  238. }
  239.  
  240.  
  241. //Cerrar: function () {
  242. //var obj = document.getElementById("contenedor")
  243.   //            obj.style.display= "none"; 
  244.    
  245. //}
  246. }
  247.  
  248.  
  249. SelUsuario.Evento(window, 'load', SelUsuario.init,false);
  250. </script>
  251.  </head>
  252. <body>
  253. Nombre Usuario: <input type="text" id="txt" value="" autocomplete="off" />
  254. <div class="vink" style="margin:5px 0px 0px 10px">
  255. <div id="contenedor" class="capa">
  256. <div id="a" class="">a</div>
  257. <div id="b" class="seleccionado">b</div>
  258. <div id="c" class="">c</div>
  259. <div id="d" class="">d</div>
  260. </div>
  261. </div>
  262. </body>
  263. </html>

Como comentaba anteriormente el problema está en que el campo de texto no mantiene el valor.
Para que se asemeje a lo que me ocurre, el text ha de tener el foco, presionas enter y el valor de la opción seleccionada, ha de imprimirse en text.

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 28/07/2009, 15:31
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Fijar valor en textbox

tienes que concatenar el valor del campo con el nuevo valor. en tu funcion Pegar2 tienes la siguiente linea, fijate en el operador +=.
Código:
Pegar2: function (ev) {
...
        document.getElementById("txt").value += ref[i].id;
...
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 28/07/2009, 15:49
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Fijar valor en textbox

Hola

Lo he probarlo y no ha dado resultado. No se trata de concatenar sino de sustituir un valor por otro. Algo como "Ja" por "Javier". Realmente lo cambia, pero no se mantiene, es como si se refrescara la página pero sin hacerlo realmente

Si se te ocurre algo más ....

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #6 (permalink)  
Antiguo 28/07/2009, 16:38
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Fijar valor en textbox

capaz que estoy haciendo mal el procedimiento. podrias indicarme como reproducirlo? y cual es el resultado que esperas?
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 29/07/2009, 07:14
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Fijar valor en textbox

Hola

Gracias por el interés

El proceso es sencillo. Pones el foco en el textbox, se me olvidó ponerse nada cargara, presionas enter y se ha de rellenar el textbox con el valor de la opción marcada. En este caso si no tocas las teclas de flecha arriba/abajo, el valor a de ser "b". Claro está si usas las teclas de flecha arriba/abajo, el valor será otro

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #8 (permalink)  
Antiguo 29/07/2009, 09:30
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 7 meses
Puntos: 839
Respuesta: Fijar valor en textbox

Yo tampoco he logrado reproducir el problema. Cuando presiono Enter el texto de la opción seleccionada se queda en el campo.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 29/07/2009, 12:44
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Fijar valor en textbox

Hola

Cita:
Iniciado por David Ver Mensaje
Yo tampoco he logrado reproducir el problema. Cuando presiono Enter el texto de la opción seleccionada se queda en el campo.
Es verdad , con este guión no se produce el problema. La única diferencia entre el código que os paso y el que yo uso, estriba, en que las opciones se cargan arreglo a la petición

Me habéis dejado KO ¿se os ocurre algo?

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #10 (permalink)  
Antiguo 29/07/2009, 12:54
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Fijar valor en textbox

Cita:
Algo como "Ja" por "Javier". Realmente lo cambia, pero no se mantiene...
releyendo y releyendo tus mensajes creo comprender el tema. me parece que tu sistema de sugerencia aparece para cada palabra que se escribe. por ejemplo, si escribes "Ja", en la sugerencias escoges "Javier", el campo se transforma a "Javier". seguido escribes un espacio y "Pe". en la sugerencia te aparece "Perez" y cuando lo escoges el campo se transforma a "Perez" en lugar de "Javier Perez". es esto lo que intentabas hacer?

si es asi, de momento no se me ocurre alguna idea. al menos confirmanos.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 29/07/2009, 13:04
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Fijar valor en textbox

Hola

Cita:
Iniciado por zerokilled Ver Mensaje
releyendo y releyendo tus mensajes creo comprender el tema. me parece que tu sistema de sugerencia aparece para cada palabra que se escribe. por ejemplo, si escribes "Ja", en la sugerencias escoges "Javier", el campo se transforma a "Javier". seguido escribes un espacio y "Pe". en la sugerencia te aparece "Perez" y cuando lo escoges el campo se transforma a "Perez" en lugar de "Javier Perez". es esto lo que intentabas hacer?

si es asi, de momento no se me ocurre alguna idea. al menos confirmanos.
No, no es eso. Se trata de un autocomplete normal. A medida que vas escribiendo en el texbox, van apareciendo las opciones, eliges una y el valor del texbox, cambia a el valor de la opción

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #12 (permalink)  
Antiguo 29/07/2009, 16:19
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Fijar valor en textbox

la verdad es que a mi no me sucede igual que a ti. he probado con Fx e iexplore, y el resultado que obtengo es el mismo de David. al presionar Enter el campo obtiene el valor de la lista de sugerencias. el valor permanece segun la sugerencia escogida.

he intentado otro procedimiento: cuando escribo en el campo desaparece la lista de sugerencias. del segundo caracter en adelante me genera el mismo error para ambos navegadores. en iexplore me dice "el sistema no puedo localizar el recurso indicado", en Fx "acceso restringuido a la URI". en local estoy limitado a realizar diferentes procedimientos por naturaleza del navegador, no puede acceder a recursos externos donde se ejecuta el script. de ahi que mi peticion fuera que nos indicara una URL donde podamos apreciar la aplicacion.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #13 (permalink)  
Antiguo 30/07/2009, 07:25
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Fijar valor en textbox

Hola

Ya encontré el problema, después de revisar una y otra vez el script que os proporcioné en anteriores post, que es exactamente igual al que yo uso, y a vosotros os funcionaba y a mí no, copié el que os imprimí y sorpresa, funcionaba correctamente. Ya había modificado con el que trabajo, así que ..... bueno, resumiendo, me dí cuenta el problema no está en el javascript. El problema esta en el html, mas concretamente en el form. Y vosotros diréis ¿qué form? Pues el form en el que introduzco el textbox.
Cuando se presiona enter, sumita el form, de ahí que insertará el valor y pareciera como si se refrescará la página. Es decir yo os dí esto

Código html:
Ver original
  1. Nombre Usuario: <input type="text" id="txt" value="" autocomplete="off" />
  2. <div class="vink" style="margin:5px 0px 0px 10px">
  3. <div id="contenedor" class="capa">
  4. <div id="a" class="">a</div>
  5. <div id="b" class="seleccionado">b</div>
  6. <div id="c" class="">c</div>
  7. <div id="d" class="">d</div>
  8. </div>
  9. </div>
  10. </body>

cuando en realidad tengo esto otro

Código html:
Ver original
  1. [B]<form>[/B]
  2. Nombre Usuario: <input type="text" id="txt" value="" autocomplete="off" />
  3. [B]</form>[/B]
  4. <div class="vink" style="margin:5px 0px 0px 10px">
  5. <div id="contenedor" class="capa">
  6. <div id="a" class="">a</div>
  7. <div id="b" class="seleccionado">b</div>
  8. <div id="c" class="">c</div>
  9. <div id="d" class="">d</div>
  10. </div>
  11. </div>
  12. </body>

Así el problema, ahora, está en como evitar que se sumite el form al presionar enter

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #14 (permalink)  
Antiguo 30/07/2009, 16:13
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Fijar valor en textbox

tienes que cancelar el evento submit. este se cancela desde el evento onsubmit devolviendo false.
Código:
<form onsubmit="return false;">
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #15 (permalink)  
Antiguo 31/07/2009, 13:29
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Fijar valor en textbox

Hola

Gracias por responder. Sí, es lo que pensé en un principio, ya que es la solución mas sencilla. Pero mi colega, que para quien es el código, me dijo que si no había otra manera. Así que pensé en usar js para evitar el sumit. Ya sabes algo como

if ((ev.keyCode == 13) && (nodo.type == "text")))

pero aún así tampoco funcionó. Lo que me queda ahora es convencerle, que la manera en que me indicas es la manera más sencilla. Pero si se os ocurre algo ....

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #16 (permalink)  
Antiguo 31/07/2009, 19:30
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Fijar valor en textbox

la otra alternativa es utilizar el estandar para prevenir que la accion de un evento se lleve a cabo.
Código:
Pegar2: function (ev) {
var obj = document.getElementById("contenedor")
var ref = obj.getElementsByTagName('DIV');
var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
// enter 13 tab 9
	if (keyCode == 13) {
	//alert("enter")
		for (var i = 0; i <= ref.length-1; i++) {
			if (ref[i].className == "seleccionado") { 
 			document.getElementById("txt").value = ref[i].id;
			break;
			alert(ref[i].id);
 			obj.style.display= "none";
			}
		}
		try{ // DOM;
		ev.preventDefault();
		}catch(e){ // iexplore;
		ev.returnValue = false;
		}
	} else if (keyCode == 9) {
	alert("Tab")
	}
},
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #17 (permalink)  
Antiguo 01/08/2009, 13:11
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Fijar valor en textbox

Gracias zerokilled por tu inestimable ayuda. Dejo el script por si a alguien le interesa

Código javascript:
Ver original
  1. var SelUsuario = {
  2.  
  3. Evento: function (elemento,nomevento,funcion) {
  4.   if (elemento.attachEvent)
  5.   {
  6.       var f=function(){
  7.         funcion.call(elemento,window.event);
  8.     }
  9.     elemento.attachEvent('on'+nomevento,f);
  10.     return true;
  11.   }
  12.   else  
  13.     if (elemento.addEventListener)
  14.     {
  15.       elemento.addEventListener(nomevento,funcion,false);
  16.       return true;
  17.     }
  18.     else
  19.       return false;
  20. },
  21.  
  22.  
  23.  
  24. init: function(){
  25. var elem1 = document.getElementById("txt");
  26. var elem2 = document.getElementById("contenedor");
  27.         SelUsuario.Evento(elem1, 'keyup', SelUsuario.Empieza);
  28.         SelUsuario.Evento(elem2, 'mouseover', SelUsuario.Seleccionar);
  29.         SelUsuario.Evento(elem1, 'keydown', SelUsuario.Pegar2);
  30.         SelUsuario.Evento(window, 'click', SelUsuario.Cerrar);
  31.     },
  32.  
  33.  
  34.  
  35.  
  36. creaAjax: function (){
  37.     var ajaxs = ["Msxml2.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLH TTP.5.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];
  38.     var ajax = false;
  39.     for(var i=0 ; !ajax && i<ajaxs.length ; i++){
  40.         try{
  41.             ajax = new ActiveXObject(ajaxs[i]);   // Internet Explorer
  42.         }
  43.         catch(e) {
  44.             ajax = false;
  45.         }
  46.     }
  47.     if(!ajax && typeof XMLHttpRequest!='undefined') {
  48.         ajax = new XMLHttpRequest();  // Firefox, Opera 8.0+, Safari
  49.     }
  50.     return ajax;
  51. },
  52.  
  53.  
  54.  
  55. Empieza: function (ev) {
  56. var str = document.getElementById(this.id).value;
  57. var obj = document.getElementById("contenedor");
  58. var ref = obj.getElementsByTagName('DIV');
  59. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  60.  
  61.      if (keyCode == 40) {
  62.         SelUsuario.BajaOpt ()
  63.      } else if (keyCode == 38) {
  64.         SelUsuario.SubeOpt ()
  65.  
  66.     } else if (keyCode == 13) {
  67.  
  68.         for (var i = 0; i <= ref.length-1; i++) {
  69.             if (ref[i].className == "seleccionado") {
  70.             document.getElementById("txt").value = ref[i].id;
  71.             if (obj.style.display == "block"); obj.style.display= "none";
  72.         break;
  73.         }
  74.  
  75.     }
  76.  
  77.         try{ // DOM;
  78.             ev.preventDefault();
  79.             }catch(e){ // iexplore;
  80.             ev.returnValue = false;
  81.             }
  82.  
  83.     } else {
  84.  
  85.     if (str.length < 2) {
  86.         //obj.innerHTML = "";
  87.         if (obj.style.display == "none")  obj.style.display= "none";
  88.                 else obj.style.display= "none";
  89.         return;
  90.     }
  91.     ajax = SelUsuario.creaAjax()
  92.     if (ajax==null) {
  93.         alert ("Tu navegador no soporta Ajax");
  94.         return;
  95.      }
  96. var url="SelecUsuarios.asp?q="+escape(str);
  97.     ajax.open("GET",url,true);
  98.     ajax.onreadystatechange = SelUsuario.Despliega;
  99.     //ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  100.             ajax.send(null);
  101.             return
  102. }
  103. },
  104.  
  105.  
  106. Despliega: function () {
  107. var obj = document.getElementById("contenedor");
  108.    
  109.         if (ajax.readyState==1 || ajax.readyState==2 || ajax.readyState==3) {
  110.                                         obj.innerHTML = "<p align='center'><img src='precarga.gif' border='0px' widht='15px' height='15px'/></p>";
  111.             obj.style.display= "block";
  112.                 }
  113.  
  114.                 else if (ajax.readyState==4) {
  115.             if (ajax.status==200) {
  116.             obj.innerHTML = unescape(ajax.responseText);
  117.  
  118.             }else {
  119.                                     obj.innerHTML = "<p>Se ha producido un error</p>";
  120.             }
  121.  
  122.         if (obj.style.display == "none")  obj.style.display= "block";
  123.         }
  124. },
  125.  
  126.  
  127.  
  128. Seleccionar: function () {
  129. var ref = document.getElementById(this.id).getElementsByTagName('DIV');
  130.     for (var i = 0; i < ref.length; i++) {
  131.         SelUsuario.Evento(ref[i], 'click', function() {
  132.         SelUsuario.Pegar(this.id);
  133.         })  
  134.  
  135.  
  136.         SelUsuario.Evento(ref[i], 'mouseover',  function() {
  137.         SelUsuario.Marcar(this.id);
  138.         })
  139.     }
  140. },
  141.  
  142.  
  143.  
  144. Pegar: function (valor) {
  145. var obj = document.getElementById("contenedor")
  146.         document.getElementById("txt").value = valor;
  147.                 if (obj.style.display == "block"); obj.style.display= "none";      
  148. },
  149.  
  150.  
  151. Pegar2: function (ev) {
  152. var obj = document.getElementById("contenedor")
  153. var ref = obj.getElementsByTagName('DIV');
  154. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  155.     if ((keyCode == 13) || (keyCode == 9)) {
  156.         for (var i = 0; i <= ref.length-1; i++) {
  157.             if (ref[i].className == "seleccionado") {
  158.             document.getElementById("txt").value = ref[i].id;
  159.             if (obj.style.display == "block"); obj.style.display= "none";
  160.         break;
  161.             }
  162.         }
  163.     }  
  164. },
  165.  
  166.  
  167.  
  168. BajaOpt: function() {
  169. var ref = document.getElementById("contenedor").getElementsByTagName('DIV');
  170.     for (var i = 0; i <= ref.length-1; i++) {
  171.         if (ref[i].className == "seleccionado") {
  172.         ref[i].className = "deseleccionado";
  173.             if (i < ref.length-1){
  174.             i++;
  175.             }else{
  176.             i = 0;
  177.             }
  178.         ref[i].className = "seleccionado"
  179.         }
  180.     }
  181. },
  182.  
  183.  
  184. SubeOpt: function() {
  185. var ref = document.getElementById("contenedor").getElementsByTagName('DIV');
  186.     for (var i = 0; i <= ref.length-1; i++) {
  187.         if (ref[i].className == "seleccionado") {
  188.         ref[i].className = "deseleccionado";
  189.             if (i < ref.length && i > 0){
  190.             i--;
  191.             }else{
  192.             i = ref.length-1;
  193.             }
  194.         ref[i].className = "seleccionado"
  195.         }
  196.     }
  197. },
  198.  
  199.  
  200. Marcar: function (id) {
  201. var selecionado = document.getElementById(id);
  202. var ref = document.getElementById("contenedor").getElementsByTagName('DIV');
  203.     for (var i = 0; i <= ref.length-1; i++) {
  204.         if (ref[i].id != id) {
  205.         ref[i].className = "deseleccionado";
  206.         selecionado.className = "seleccionado";
  207.         }
  208.     }
  209. },
  210.  
  211.  
  212.  
  213. Cerrar: function () {  
  214. var obj = document.getElementById("contenedor")
  215.             if (obj.style.display == "block"); obj.style.display= "none";  
  216.     }
  217. }
  218.  
  219. SelUsuario.Evento(window, 'load', SelUsuario.init,false);
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:53.