Ver Mensaje Individual
  #26 (permalink)  
Antiguo 27/03/2012, 16:26
Avatar de IsaBelM
IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 11 meses
Puntos: 1012
Respuesta: Utilizar las teclas direccionales para seleccionar un item

Cita:
Iniciado por freesoftwarrior Ver Mensaje
si quisiera aplicar estas rutinas para otro select, ¿tendría que cambiar el nombre sólo al contenedor de las funciones (en este caso SelUsuario)?
es algo mas complejo
Código Javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml"lang="es" xml:lang="es">
  3. <head>
  4. <meta name="http-equiv" content="Content-type: text/html; charset=utf-8"/>
  5. <STYLE TYPE="text/css">
  6. #contenedorOpt div.seleccionado {font-weight:bold; background:#F0F0F0; color:#FF6600;}
  7. #contenedorOpt div.deseleccionado {background:#FFFFFF; color:#000000;}
  8. #contenedorOpt div {font:11px verdana; color:#000000; cursor:pointer; text-align:left; padding:2px 5px;}
  9.  
  10. .capa {
  11. background: #FFFFFF;
  12. border:1px solid rgb(120,120,120);
  13. width: 144px;
  14. _width: 146px;
  15. text-align: left;
  16. position: absolute;
  17. }
  18. </STYLE>
  19. <script type="text/javascript">
  20. var TxtId = ''; // el texbox desde donde se lanza la consulta y donde ha de imprimirse la opción cuando se usa la función Pegar()
  21.  
  22. var SelUsuario = {
  23.  
  24. captura_objeto : function(idnombre) {
  25.     return document.getElementById(idnombre);
  26. },
  27.  
  28.  
  29. Evento: function (elemento,nomevento,funcion) {
  30.     if (elemento.attachEvent) {
  31.             var f=function() {
  32.                 funcion.call(elemento,window.event);
  33.             }
  34.             elemento.attachEvent('on'+nomevento,f);
  35.             return true;
  36.     } else if (elemento.addEventListener) {
  37.             elemento.addEventListener(nomevento,funcion,false);
  38.             return true;
  39.         }else{
  40.             return false;
  41.     }
  42. },
  43.  
  44.  
  45. creaAjax: function (){
  46. ajax = new XMLHttpRequest();
  47. return ajax;
  48. },
  49.  
  50.  
  51. init: function(){
  52. var tablas = document.body.getElementsByTagName('table');
  53.     for (i=0; i < tablas.length; i++) {
  54.         var inpt = tablas[i].getElementsByTagName('input');
  55.                 SelUsuario.Evento(SelUsuario.captura_objeto(inpt[2].id), 'keyup', SelUsuario.Empieza);
  56.                 SelUsuario.Evento(SelUsuario.captura_objeto('contenedorOpt'), 'mouseover', SelUsuario.Seleccionar);
  57.             SelUsuario.Evento(SelUsuario.captura_objeto(inpt[2].id), 'keydown', SelUsuario.Pegar2);
  58.                 SelUsuario.Evento(SelUsuario.captura_objeto(inpt[2].id), 'blur', SelUsuario.Cerrar);
  59.     }
  60. },
  61.  
  62.  
  63.  
  64. PosicionAbsolutaElemento: function(elTxtBox)  {
  65.     if (typeof elTxtBox == "string")
  66.         var elTxtBox = SelUsuario.captura_objeto(elTxtBox);
  67.             if (!elTxtBox) return { top:0,left:0 };
  68.         var y = 0;
  69.         var x = 0;
  70.             while (elTxtBox.offsetParent) {
  71.                     x += elTxtBox.offsetLeft;
  72.                     y += elTxtBox.offsetTop;
  73.                 elTxtBox = elTxtBox.offsetParent;
  74.             }
  75.         return {top:y,left:x};
  76.  
  77. },
  78.  
  79.  
  80. Desplieaga: function(posLeft,posTop) {
  81. var elDiv = SelUsuario.captura_objeto('contenedorOpt');
  82. //alert(elDiv.id+ " - " +posLeft+ " - " +posTop);
  83.     elDiv.style.left = posLeft+'px';
  84.     elDiv.style.top = parseInt(posTop+21) +'px';
  85.             elDiv.style.display = 'block';
  86.     elDiv.style.zIndex = 100;
  87. },
  88.  
  89.  
  90. Empieza: function (ev) {
  91. TxtId = SelUsuario.captura_objeto(this.id).id;
  92. var elTxtBox = SelUsuario.captura_objeto(this.id);
  93. var str = elTxtBox.value;
  94. var elDiv = SelUsuario.captura_objeto('contenedorOpt');
  95. var opt = elDiv.getElementsByTagName('DIV');
  96. var keyCode = (ev) ? et.keyCode : ev.charCode;
  97.  
  98.      if (keyCode == 40) { // flecha abajo
  99.         SelUsuario.BajaOpt ('contenedorOpt')
  100.  
  101.      } else if (keyCode == 38) { // flecha arriba
  102.         SelUsuario.SubeOpt ('contenedorOpt')
  103.  
  104.     } else if (keyCode == 13) { // enter
  105.         for (var i = 0; i <= opt.length-1; i++) {
  106.             if (opt[i].className == "seleccionado") {
  107.                 str = opt[i].id;
  108.                 if (elDiv.style.display == "block"); elDiv.style.display= "none";
  109.         break;
  110.             }
  111.         }
  112.  
  113.         try{
  114.             ev.preventDefault();
  115.         }catch(e){
  116.             ev.returnValue = false;
  117.         }
  118.     } else {
  119.  
  120.         if (str.length < 2) {
  121.             //elDiv.innerHTML = "";
  122.             if (elDiv.style.display == "none")  elDiv.style.display= "none";
  123.                     else elDiv.style.display= "none";  
  124.             return;
  125.         }
  126.  
  127.         ajax = SelUsuario.creaAjax()
  128.         if (ajax==null) {
  129.             alert ("Tu navegador no soporta Ajax");
  130.         return;
  131.         }
  132.  
  133. var url="SelecUsuarios.php?q="+escape(str);
  134. ajax.open("GET",url,true);
  135. ajax.onreadystatechange = function () {
  136. var PosElemento = SelUsuario.PosicionAbsolutaElemento(elTxtBox);
  137. var posicionInicialLeft = parseInt(PosElemento.left);
  138. var posicionInicialTop = parseInt(PosElemento.top);
  139.  
  140.         if (ajax.readyState==1 || ajax.readyState==2 || ajax.readyState==3) {
  141.                                         elDiv.innerHTML = "<p align='center'><img src='precarga.gif' border='0px' widht='15px' height='15px'/></p>";
  142.             elDiv.style.display= "block";
  143.                 }
  144.  
  145.                 else if (ajax.readyState==4) {
  146.             if (ajax.status==200) {
  147.                 elDiv.innerHTML = unescape(ajax.responseText);
  148.             }else {
  149.                                         elDiv.innerHTML = "<p>Se ha producido un error</p>";
  150.             }
  151.  
  152.         if (elDiv.style.display == "none")  elDiv.style.display= "block";
  153.         }
  154. SelUsuario.Desplieaga(posicionInicialLeft, posicionInicialTop);
  155.     }
  156.     //ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  157.             ajax.send(null);
  158.             return
  159. }
  160. },
  161.  
  162.  
  163.  
  164.  
  165.  
  166. Seleccionar: function () {
  167. var opt = SelUsuario.captura_objeto('contenedorOpt').getElementsByTagName('DIV');
  168.  
  169.     for (var i = 0; i < opt.length; i++) {
  170.         SelUsuario.Evento(opt[i], 'click', function() {
  171. //alert(this.id);
  172.         SelUsuario.Pegar(this.id);
  173.         })  
  174.  
  175.  
  176.         SelUsuario.Evento(opt[i], 'mouseover',  function() {
  177. //alert(this.id);
  178.         SelUsuario.Marcar(this.id);
  179.         })
  180.  
  181.  
  182.         //SelUsuario.Evento(opt[i], 'mouseout',  function() {
  183.         //SelUsuario.DesMarcar(this.id);
  184.         //})
  185.     }
  186. },
  187.  
  188.  
  189.  
  190. Pegar: function (valor) {
  191. //alert(TxtId);
  192. var elDiv = SelUsuario.captura_objeto('contenedorOpt')
  193.     SelUsuario.captura_objeto(TxtId).value = valor;
  194.             if (elDiv.style.display == "block"); elDiv.style.display= "none";      
  195. },
  196.  
  197.  
  198.  
  199. Marcar: function (valor) {
  200. //alert(valor.id);
  201. var selecionado = SelUsuario.captura_objeto(valor);
  202. var opt = SelUsuario.captura_objeto('contenedorOpt').getElementsByTagName('DIV');
  203.     for (var i = 0; i < opt.length; i++) {
  204.         if (opt[i].className == "seleccionado") {
  205. //alert(opt[i].id + " - " + valor.id);
  206.             opt[i].className = "deseleccionado";
  207.             selecionado.className = "seleccionado";
  208.     break;
  209.         }
  210.     }
  211. },
  212.  
  213. //DesMarcar: function (valor) {
  214. //var opt = SelUsuario.captura_objeto(valor);
  215. //alert(opt);
  216. //opt.className = "deseleccionado"
  217. //alert("el " +valor);         
  218. //},
  219.  
  220.  
  221. Pegar2: function (ev) {
  222. var elDiv = SelUsuario.captura_objeto('contenedorOpt')
  223. var opt = elDiv.getElementsByTagName('DIV');
  224. var keyCode = (ev) ? et.keyCode : ev.charCode;
  225.  
  226. // enter 13 tab 9
  227.     if ((keyCode == 13) || (keyCode == 9)) {
  228. //alert("enter")
  229.         for (var i = 0; i <= opt.length-1; i++) {
  230.  
  231.             if (opt[i].className == "seleccionado") {
  232.                 SelUsuario.captura_objeto(this.id).value = opt[i].id;
  233.                 //window.focus();
  234.                     if (elDiv.style.display == "block"); elDiv.style.display= "none";
  235.         break;
  236. //alert(opt[i].id);
  237.             }
  238.         }
  239.  
  240.     if (keyCode == 13) {
  241.         try{
  242.             ev.preventDefault();
  243.         }catch(e){
  244.             ev.returnValue = false;
  245.         }
  246.     }
  247.  
  248.  
  249.     }  
  250. },
  251.  
  252.  
  253.  
  254. BajaOpt: function() {
  255. var opt = SelUsuario.captura_objeto('contenedorOpt').getElementsByTagName('DIV');
  256.     for (var i = 0; i <= opt.length-1; i++) {
  257.         if (opt[i].className == "seleccionado") {
  258.             opt[i].className = "deseleccionado";
  259.             if (i < opt.length-1){
  260.                 i++;
  261.             }else{
  262.                 i = 0;
  263.             }
  264. //alert("Largo: " +(opt.length-1)+ " Valor: " +i);
  265.             opt[i].className = "seleccionado"
  266.         }
  267.     }
  268. },
  269.  
  270.  
  271. SubeOpt: function() {
  272. var opt = SelUsuario.captura_objeto('contenedorOpt').getElementsByTagName('DIV');
  273.     for (var i = 0; i <= opt.length-1; i++) {
  274.         if (opt[i].className == "seleccionado") {
  275.             opt[i].className = "deseleccionado";
  276.             if (i < opt.length && i > 0){
  277.                 i--;
  278.             }else{
  279.                 i = opt.length-1;
  280.             }
  281. //alert("Largo: " +(opt.length-1)+ " Valor: " +i);
  282.             opt[i].className = "seleccionado"
  283.         }
  284.     }
  285. },
  286.  
  287.  
  288. Cerrar: function () {
  289. //alert(this.id)
  290. setTimeout("var elDiv = SelUsuario.captura_objeto('contenedorOpt'); if (elDiv.style.display == 'block'); elDiv.style.display= 'none';", 1000);
  291. }
  292.  
  293. }
  294. SelUsuario.Evento(window, 'load', SelUsuario.init);
  295. </script>
  296. </head>
  297. <body>
  298. <form method="post" action="">
  299.  
  300. <table width="351" border="1" align="center" bordercolor="#0000FF" id="idt_1">
  301.  <tr>
  302. <td>Sel</td>  
  303. <td width="36">Csr:</td>
  304.  
  305. <td width="70">Modelo:</td>
  306. <td width="47">Serie:</td>
  307. <td width="170">Comentarios:</td>
  308. </tr>
  309. <tr>
  310. <td width="21"><input type="checkbox" name="cod" value="" tabindex="1" ></td>
  311. <td height="55"><input type="text" name="csr" readonly="readonly" size="3" value="2345" tabindex="2"></td>
  312. <td>Nombre Usuario: <input type="text" name="txt" id="txt1" value="" autocomplete="off" tabindex="3"></td>
  313. <td><input type="text" name="serie" tabindex="4"></td>
  314. <td><textarea name="comentarios" cols="30" rows="3" wrap="VIRTUAL" tabindex="5"></textarea></td>
  315. </tr>
  316.  </table>
  317.  
  318.  
  319.  
  320. <table width="351" border="1" align="center" bordercolor="#0000FF" id="idt_2">
  321.  <tr>
  322. <td>Sel</td>  
  323. <td width="36">Csr:</td>
  324. <td width="70">Modelo:</td>
  325. <td width="47">Serie:</td>
  326. <td width="170">Comentarios:</td>
  327. </tr>
  328.  
  329. <tr>
  330. <td width="21"><input type="checkbox" name="cod" value="" tabindex="6" ></td>
  331. <td height="55"><input type="text" name="csr" readonly="readonly" size="3" value="2346" tabindex="7"></td>
  332. <td>Nombre Usuario: <input type="text" name="txt" id="txt2" value="" autocomplete="off" tabindex="8"></td>
  333. <td><input type="text" name="serie" tabindex="9"></td>
  334. <td><textarea name="comentarios" cols="30" rows="3" wrap="VIRTUAL" tabindex="10"></textarea></td>
  335. </tr>
  336.  </table>
  337.  
  338. <div id="contenedorOpt" class="capa" style="display:none;"></div>
  339. </form>
  340. </body>
  341. </html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}