2010-09-16 10 views
5

Estoy trabajando en una aplicación en la que deseo permitir la entrada rápida de datos. Así que quiero hacer un campo de fecha seleccionado por valor de mes int (es decir, 7 = julio). Creo que solo tengo 2 opciones.¿Hay una forma HTML limpia de relacionar una pulsación de tecla con un elemento desplegable

  1. Anteponer el número de mes (1 - Jan, 2 - Feb, etc ...) pero esto es feo
  2. Uso JS o jQuery para interceptar las pulsaciones de tecla y seleccione el mes correspondiente (factible , pero desordenado)

¿Hay alguna manera de tener un localizador oculto para un menú desplegable?

- Editar para mayor claridad -

Estoy tratando de permitir a los usuarios a introducir la fecha a través del teclado con más facilidad lo que en lugar de utilizar un selector de calendario (que no tengo) que podían escribir .... 1 pestaña 1 pestaña 2010, que daría como resultado la fecha 1 de enero de 2010

+3

Si pulsa las teclas, tendrá que encontrar una forma de seleccionar Nov y Dec ya que son números de dos dígitos. Esto, como dijiste, se vuelve desordenado. Sugeriría usar un autocompletado, ya que dos letras del mes deberían ser suficientes para seleccionarlo. – sworoc

+0

¿Qué es lo que preguntas/tratas de resolver? Esto podría escribirse mejor –

+0

¡Felicitaciones a sworoc por poder responder! –

Respuesta

0

Existe un atributo accesskey en HTML, que permite especificar el acceso mediante [Alt] + Character. Pero no sé, si esto funciona para <option>:

<select> 
    <option accesskey="1">January</option> 
    <!-- ... --> 
</select> 
+1

A partir de las especificaciones HTML: "Los siguientes elementos admiten el atributo accesskey: A, AREA, BUTTON, INPUT, LABEL, LEGEND y TEXTAREA". Pero a pesar de todo, esto no funcionaría para octubre-diciembre ni si había varios cuadros de fechas en la misma página. – Matthew

+0

@konforce: [El estándar HTML5] (http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#the-accesskey-attribute) también permite este atributo en otros elementos ese no es el problema. La pregunta es si el navegador implementa esto para los menús desplegables;) Pero sí, tienes razón, obviamente esto fracasará con selecciones de meses múltiples en una página. – NikiC

+0

Lo he intentado: Firefox 4 no es compatible con esto. – NikiC

2

Aquí hay un ejemplo de cómo conseguir que funcione:

$(function() 
{ 
    $.each($("select.month"), function() { new MonthSelector(this); }); 
}); 

var MonthSelector = function(that) 
{ 
    var self = this; 
    $(that).bind("keypress", function(event) { self.onKeyPress(event); }); 
    this.two = false; 
    this.select = that; 
}; 

MonthSelector.prototype.onKeyPress = function(event) 
{ 
    if (event.which < 48 || event.which > 57) return; 
    var digit = event.which - 48; 

    if (this.two && digit <= 2) 
    { 
     digit += 10; 
     this.two = false; 
    } 
    else 
    { 
     this.two = (digit == 1); 
    } 

    if (digit != 0) 
     this.select.selectedIndex = digit - 1; 
}; 

Está codificado para trabajar con 1-12 por razones de simplicidad. (Los menús desplegables de fecha y año deberían funcionar automáticamente en virtud de la funcionalidad integrada del navegador.)

Esto tampoco debería afectar la capacidad del usuario para (por ejemplo) escribir "Dec" para diciembre.

0

Puede hacerlo fácilmente con javascript. Simplemente marque la casilla desplegable seleccionada (en el foco) y presione la tecla, si se presiona 1, luego seleccione el primer elemento, 2 segundos y así sucesivamente. También puede ser necesario agregar un poco de retraso y esperar una segunda pulsación de tecla en caso de números de varios dígitos.

alternativa, se puede probar algo no estándar:

<label for="state">State:</label> 
<select id="state" name="state"> 
    <option accesskey="1">.1.</option> 
    <option accesskey="2">.2.</option> 
    <option accesskey="3">.3.</option> 
    <option accesskey="4">.4.</option> 
</select> 

pulsando Alt + Número que será capaz de seleccionar elementos en el menú desplegable. Simplemente agregue el atributo accesskey a las opciones dinámicamente (JavaScript) a su cuadro desplegable enfocado.

+0

¿Por qué esto "no es estándar"? – NikiC

+0

-1 Y realmente no aprecio que mi respuesta sea robada. Revertiré mi voto si revierte su respuesta a su forma original. – NikiC

+0

No es estándar porque no está en el estándar w3 (duh!) Y no se garantiza que funcione en diferentes navegadores web. ¿Fue robado? ¿Qué edad tienes, 10? No es una carrera, estoy bastante seguro de que todos los comentarios fueron publicados al mismo tiempo, así que ni siquiera vi tu respuesta cuando estaba escribiendo. –

Cuestiones relacionadas