LinuxParty
Los teclados virtuales siguen siendo útiles en muchos escenarios: pantallas táctiles, kioscos, terminales de autoservicio, formularios especiales o proyectos donde queremos ofrecer una forma alternativa de entrada de texto sin depender del teclado físico.
En este tutorial vamos a crear un teclado virtual funcional con jQuery, manteniendo el enfoque didáctico en esta librería, pero usando una forma de trabajo más clara y actual. El objetivo será construir un teclado en pantalla que permita escribir en un campo de texto, borrar caracteres y activar mayúsculas mediante la tecla Shift.
La idea no es solo que funcione, sino que también sirva como base para ampliarlo más adelante.
En este tutorial vamos a crear un teclado virtual completamente funcional usando jQuery, ideal para:
- Formularios en pantallas táctiles
- Sistemas POS o kioscos
- Interfaces donde queremos evitar el uso del teclado físico
Aunque hoy existen alternativas modernas, jQuery sigue siendo útil para proyectos rápidos, mantenimiento de código legacy o aprendizaje práctico del DOM.
🎯 Resultado final
Al finalizar tendrás:
- Un teclado en pantalla
- Soporte para escribir en un input
- Tecla Shift
- Tecla Backspace
- Compatible con clic y pantallas táctiles
🧱 1. Estructura HTML
Primero creamos el input y el teclado:
<input type="text" id="text-input" placeholder="Escribe aquí..."> <ul id="keyboard"> <li class="key" data-key="1">1</li> <li class="key" data-key="2">2</li> <li class="key" data-key="3">3</li> <li class="key" data-key="q">q</li> <li class="key" data-key="w">w</li> <li class="key" data-key="e">e</li> <li class="key special" data-key="shift">Shift</li> <li class="key" data-key="a">a</li> <li class="key" data-key="s">s</li> <li class="key special" data-key="backspace">←</li> </ul>
👉 Usamos data-key para almacenar el valor de cada tecla (más limpio y escalable).
🎨 2. Estilos CSS básicos
#keyboard {
list-style: none;
padding: 0;
max-width: 400px;
}
.key {
display: inline-block;
padding: 10px;
margin: 5px;
background: #eee;
border-radius: 5px;
cursor: pointer;
}
.key:hover {
background: #ddd;
}
.special {
background: #ccc;
}
👉 Puedes mejorar esto con Grid si quieres una distribución más profesional.
⚙️ 3. Lógica con jQuery
Incluimos jQuery actualizado:
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
Ahora la lógica principal:
$(function() { let shiftOn = false; const $input = $("#text-input"); $(".key").on("click touchstart", function() { let key = $(this).data("key"); // SHIFT if (key === "shift") { shiftOn = !shiftOn; return; } // BACKSPACE if (key === "backspace") { let current = $input.val(); $input.val(current.slice(0, -1)); return; } // MAYÚSCULAS if (shiftOn) { key = key.toUpperCase(); } // AÑADIR TEXTO $input.val($input.val() + key); }); });
🧠 4. Explicación rápida
-
$(function(){}) → ejecuta cuando el DOM está listo
.on("click touchstart") → funciona en PC y móviles data("key") → obtiene el valor de la tecla shiftOn → controla mayúsculas .val() → lee/escribe en el input
➕ 5. Mejoras opcionales
Puedes ampliar fácilmente:
✔ Añadir más teclas
Solo añade más <li> con data-key.
✔ Tecla Enter
<li class="key special" data-key="enter">Enter</li> if (key === "enter") { alert("Enviar formulario"); return; }
✔ Desactivar Shift tras usarlo
if (shiftOn) {
key = key.toUpperCase();
shiftOn = false;
}
✔ Añadir animaciones
.key:active { transform: scale(0.95); }
📱 6. Compatibilidad móvil
Gracias a:
.on("click touchstart")
👉 El teclado funciona en:
- Móviles
- Tablets
- Pantallas táctiles
⚠️ 7. Buenas prácticas con jQuery hoy
Aunque jQuery sigue siendo útil:
👉 Úsalo cuando:
- Mantienes proyectos antiguos
- Necesitas rapidez
- El entorno ya lo utiliza
👉 Evítalo cuando:
- Empiezas proyectos modernos grandes
- Usas frameworks como React o Vue
💡 Conclusión
Has creado un teclado virtual funcional con jQuery moderno, aplicando buenas prácticas actuales:
✔ Código limpio
✔ Eventos modernos (.on)
✔ Uso de data-*
✔ Compatible con móviles
Código fuente completo.
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Teclado virtual con jQuery</title> <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <style> body { font-family: Arial, sans-serif; background: #f4f4f4; margin: 0; padding: 30px; } .contenedor { max-width: 900px; margin: 0 auto; background: #ffffff; border-radius: 10px; padding: 25px; box-shadow: 0 2px 10px rgba(0,0,0,0.08); } h1 { margin-top: 0; color: #222; } p { color: #444; line-height: 1.6; } .zona-input { margin-bottom: 25px; } #text-input { width: 100%; box-sizing: border-box; padding: 14px; font-size: 18px; border: 1px solid #ccc; border-radius: 8px; outline: none; } #text-input:focus { border-color: #888; } #keyboard { display: flex; flex-direction: column; gap: 10px; user-select: none; } .fila { display: flex; flex-wrap: wrap; gap: 8px; } .key { min-width: 50px; padding: 12px 14px; text-align: center; background: #e9e9e9; border: 1px solid #cfcfcf; border-radius: 8px; cursor: pointer; transition: background 0.2s ease, transform 0.1s ease; font-size: 16px; } .key:hover { background: #dddddd; } .key:active { transform: scale(0.96); } .key.special { background: #d8d8d8; font-weight: bold; } .key.space { flex: 1; } .key.active-shift { background: #bfcde0; border-color: #94afd0; } .nota { margin-top: 20px; font-size: 14px; color: #666; } @media (max-width: 600px) { .key { min-width: 42px; padding: 10px 12px; font-size: 14px; } #text-input { font-size: 16px; } } </style> </head> <body> <div class="contenedor"> <h1>Teclado virtual con jQuery</h1> <p> Este ejemplo muestra cómo crear un teclado virtual funcional usando jQuery. Podrás escribir en el campo de texto, activar mayúsculas con Shift y borrar con Backspace. </p> <div class="zona-input"> <input type="text" id="text-input" placeholder="Escribe aquí..."> </div> <div id="keyboard"> <div class="fila"> <div class="key" data-key="1">1</div> <div class="key" data-key="2">2</div> <div class="key" data-key="3">3</div> <div class="key" data-key="4">4</div> <div class="key" data-key="5">5</div> <div class="key" data-key="6">6</div> <div class="key" data-key="7">7</div> <div class="key" data-key="8">8</div> <div class="key" data-key="9">9</div> <div class="key" data-key="0">0</div> </div> <div class="fila"> <div class="key" data-key="q">q</div> <div class="key" data-key="w">w</div> <div class="key" data-key="e">e</div> <div class="key" data-key="r">r</div> <div class="key" data-key="t">t</div> <div class="key" data-key="y">y</div> <div class="key" data-key="u">u</div> <div class="key" data-key="i">i</div> <div class="key" data-key="o">o</div> <div class="key" data-key="p">p</div> </div> <div class="fila"> <div class="key" data-key="a">a</div> <div class="key" data-key="s">s</div> <div class="key" data-key="d">d</div> <div class="key" data-key="f">f</div> <div class="key" data-key="g">g</div> <div class="key" data-key="h">h</div> <div class="key" data-key="j">j</div> <div class="key" data-key="k">k</div> <div class="key" data-key="l">l</div> <div class="key" data-key="ñ">ñ</div> </div> <div class="fila"> <div class="key special" data-key="shift">Shift</div> <div class="key" data-key="z">z</div> <div class="key" data-key="x">x</div> <div class="key" data-key="c">c</div> <div class="key" data-key="v">v</div> <div class="key" data-key="b">b</div> <div class="key" data-key="n">n</div> <div class="key" data-key="m">m</div> <div class="key special" data-key="backspace">⌫</div> </div> <div class="fila"> <div class="key" data-key=".">.</div> <div class="key" data-key=",">,</div> <div class="key" data-key="-">-</div> <div class="key space" data-key=" ">Espacio</div> <div class="key special" data-key="clear">Limpiar</div> </div> </div> <p class="nota"> Consejo: este ejemplo es una buena base para ampliarlo con más teclas, diseño visual avanzado o validaciones. </p> </div> <script> $(function () { let shiftOn = false; const $input = $("#text-input"); const $shiftKey = $('.key[data-key="shift"]'); function insertarTexto(texto) { $input.val($input.val() + texto); $input.focus(); } function borrarUltimoCaracter() { const valorActual = $input.val(); $input.val(valorActual.slice(0, -1)); $input.focus(); } function actualizarEstadoShift() { if (shiftOn) { $shiftKey.addClass("active-shift"); } else { $shiftKey.removeClass("active-shift"); } } $(".key").on("click touchstart", function (e) { e.preventDefault(); let key = $(this).data("key"); if (key === "shift") { shiftOn = !shiftOn; actualizarEstadoShift(); return; } if (key === "backspace") { borrarUltimoCaracter(); return; } if (key === "clear") { $input.val(""); $input.focus(); return; } if (typeof key === "string" && shiftOn) { key = key.toUpperCase(); } insertarTexto(key); if (shiftOn) { shiftOn = false; actualizarEstadoShift(); } }); }); </script> </body> </html>
-
Programación
- Creando un Teclado Virtual con jQuery
- Tutorial de jQuery, rápido.
- Las 25 mejores herramientas y frameworks PHP para desarrolladores en 2025 / 2026
- Los siete mejores IDE para PHP.
- KBasic, el auténtico Visual Basic para Linux. Y compatible con él.
- libdvdcss2 y w32codecs para Ubuntu
- Crear y empaquetar software para Linux en RPM, parte 1, creando paquetes.
- Windsurf Editor: el IDE con inteligencia artificial que está revolucionando el desarrollo de software
- GitHub Copilot Chat ahora es de Código Abierto y personalizable
- GitHub Copilot: Tu nuevo copiloto de código con IA, compatible con VS Code, JetBrains, Vim y más
- Distribuir la carga de trabajo (entre servidores) de su aplicación PHP con Gearm
- ¿Por qué usar FreeBASIC hoy por hoy? Rápido, compatible y sorprendentemente útil




Comentarios
la intencion es buena, pero es mas sopeschoso que un keyloger
Sospechoso, será cuando el código no es visible, como las empresas que hacen software privativo, pero ¿con código abierto?
Yo creo, que es bastante claro, que es más seguro.
Si crees que es sospoechoso revisa el codigo fuente y veras si lo es o no, si no tienes conocimientos de programación pagale a alguien para que lo haga, pero lances cosas solo por decir algo, si no sabes no comentes.
Excelente aporte, felicitaciones por el codigo, justamente esto se utiliza para dar mayor seguridad en el ingreso de datos. Salu2.