Ver Mensaje Individual
  #14 (permalink)  
Antiguo 02/07/2009, 06:15
Avatar de Adler
Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años
Puntos: 126
Respuesta: Como seleccionar un elemento de una lista desplegable con teclado?

Hola

Veamos ....

Tendrás que pasar javascript, así que necesitarás mandar llamar, de forma externa, a este guión con la extensión .js

Código javascript:
Ver original
  1. var tagScript = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
  2. /**
  3. * Eval script fragment
  4. * @return String
  5. */
  6. String.prototype.evalScript = function()
  7. {
  8.         return (this.match(new RegExp(tagScript, 'img')) || []).evalScript();
  9. };
  10. /**
  11. * strip script fragment
  12. * @return String
  13. */
  14. String.prototype.stripScript = function()
  15. {
  16.         return this.replace(new RegExp(tagScript, 'img'), '');
  17. };
  18. /**
  19. * extract script fragment
  20. * @return String
  21. */
  22. String.prototype.extractScript = function()
  23. {
  24.         var matchAll = new RegExp(tagScript, 'img');
  25.         return (this.match(matchAll) || []);
  26. };
  27. /**
  28. * Eval scripts
  29. * @return String
  30. */
  31. Array.prototype.evalScript = function(extracted)
  32. {
  33.                 var s=this.map(function(sr){
  34.                 var sc=(sr.match(new RegExp(tagScript, 'im')) || ['', ''])[1];
  35.                 if(window.execScript){
  36.                 window.execScript(sc);
  37.                 }
  38.                 else
  39.                 {
  40.                  window.setTimeout(sc,0);
  41.                 }
  42.                 });
  43.                 return true;
  44. };
  45. /**
  46. * Map array elements
  47. * @param {Function} fun
  48. * @return Function
  49. */
  50. Array.prototype.map = function(fun)
  51. {
  52.         if(typeof fun!=="function"){return false;}
  53.         var i = 0, l = this.length;
  54.         for(i=0;i<l;i++)
  55.         {
  56.                 fun(this[i]);
  57.         }
  58.         return true;
  59. };


por otro lado, en principio no te va a funcionar por que está interviniendo un checkbox o radio. Modifica lo que sea necesario hasta adaptarlo a lo que te ocupa

Código javascript:
Ver original
  1. function completarNombre(nombre){
  2.     var comp = document.getElementById('autocomplete');
  3.     var textbox = document.getElementById('usuario');
  4.     textbox.value = nombre;  
  5.     comp.style.display= "none";
  6. }
  7.  
  8.  
  9.  
  10. function ocultarautocomplete(){
  11.     var comp = document.getElementById('autocomplete');
  12.     comp.style..display= "none";   
  13. }
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20. function autocompletar()
  21. {
  22.     var comp = document.getElementById('autocomplete');
  23.     var textbox = document.getElementById('usuario');
  24.     if (document.getElementById('buscarporape').checked == true)
  25.         var crit = "usuario";
  26.     else
  27.         var crit = "apellidos";
  28.  
  29.     if (textbox.value == ""){
  30.         comp.style.visibility = "hidden";
  31.     }
  32.     else {
  33.         colocarAutocomplete();
  34.         var ajax = nuevoAjax();
  35.         ajax.open("POST","auxi/autocomplete.php",true);
  36.         ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  37.         ajax.onreadystatechange = function() {
  38.             if (ajax.readyState == 4){
  39.                 var scs=ajax.responseText.extractScript();
  40.                     comp.innerHTML = ajax.responseText.stripScript();
  41.                 scs.evalScript();
  42.  
  43.             }
  44.         }
  45.         ajax.send("texto=" + textbox.value + "&crit=" + crit);
  46.     }
  47. }
  48.  
  49. function colocarAutocomplete(){
  50.     var comp = document.getElementById('autocomplete');
  51.     var textbox = document.getElementById('usuario');
  52.     var oNode = textbox;
  53.     var iLeft = 0;
  54.     var iTop = 0;
  55.     while(oNode.tagName != "BODY") {
  56.         iLeft += oNode.offsetLeft;
  57.         iTop += oNode.offsetTop;
  58.         oNode = oNode.offsetParent;
  59.     }
  60.     comp.style.left = iLeft;
  61.     comp.style.top = iTop + textbox.offsetHeight;
  62.     comp.style.width = textbox.offsetWidth;
  63. }
  64.  
  65.  
  66.  
  67.  
  68. function Evento(elemento,nomevento,funcion) {
  69.   if (elemento.attachEvent)
  70.   {
  71.       var f=function(){
  72.         funcion.call(elemento,window.event);
  73.     }
  74.     elemento.attachEvent('on'+nomevento,f);
  75.     return true;
  76.   }
  77.   else  
  78.     if (elemento.addEventListener)
  79.     {
  80.       elemento.addEventListener(nomevento,funcion,false);
  81.       return true;
  82.     }
  83.     else
  84.       return false;
  85. }
  86.  
  87.  
  88. window.onload = function () {
  89. var elemento = document.getElementById('autocomplete');
  90. var elementoDIV = document.getElementById('usuario');
  91.  
  92.    
  93.     elemento.onkeyup = function() {
  94.         autocompletar(elemento.value);
  95.         }
  96.  
  97.     window.onclick = function () {
  98.         ocultarautocomplete();
  99.         }
  100.  
  101. }

en la petición has de incluir algo como

Código javascript:
Ver original
  1. <script type="tex/javascript">
  2. var ref = document.getElementById('usuario').getElementsByTagName('nombredelelemento');
  3. for (var i = 0; i < ref.length; i++) {
  4.   Evento(ref[i], 'click', function() {
  5.       completarNombre(this.id);
  6. })    
  7. }
  8. </script>

alguna duda, ya sabes ....

Suerte
__________________
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;" />