2010-09-16 8 views
5

Sto lavorando a un'applicazione in cui desidero consentire l'immissione rapida di dati. Quindi voglio fare un campo data selezionato per il valore int mese (cioè 7 = luglio). Penso di avere solo 2 opzioni.Esiste un modo HTML pulito per collegare una pressione di un tasto a un articolo a discesa

  1. Anteponi il numero al mese (1 - Jan, 2 - Feb, ... ecc), ma questo è brutto
  2. Usa JS o jQuery per intercettare le pressioni dei tasti e selezionare il mese appropriato (fattibile , ma disordinato)

C'è un modo per avere un localizzatore nascosto per una discesa?

- Modifica per chiarezza -

Sto cercando di consentire agli utenti di inserire la data tramite la tastiera più facilmente così invece di utilizzare un selettore di calendario (che ho) che potevano tipo .... 1 scheda 1 tab 2010, che risulterebbe nella data 1 gennaio 2010

+3

Se si eseguono pressioni di tasti, sarà necessario trovare un modo per selezionare Nov e Dec poiché sono numeri a due cifre. Questo, come hai detto tu, diventa caotico. Vorrei suggerire di utilizzare un completamento automatico, in quanto due lettere del mese dovrebbero essere sufficienti per selezionarlo. – sworoc

+0

Che cosa stai chiedendo/cercando di risolvere? Questo potrebbe essere scritto meglio –

+0

Complimenti a sworoc per essere in grado di dare una risposta! –

risposta

0

C'è un attributo accesskey in HTML, che consente di specificare per consentire l'accesso utilizzando [Alt] + Character. Ma io non lo so, se questo funziona per <option>:

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

Dalle specifiche HTML: "I seguenti elementi supportano l'attributo accesskey: A, AREA, BUTTON, INPUT, LABEL e LEGEND e TEXTAREA." Ma a prescindere, questo non funzionerebbe per ottobre-dicembre, né se ci fossero più caselle di data sulla stessa pagina. – Matthew

+0

@konforce: [Lo standard HTML5] (http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#the-accesskey-attribute) consente questo attributo anche ad altri elementi non è questo il problema La domanda è se il browser implementa questo per i menu a discesa;) Ma sì, hai ragione, ovviamente questo fallirà con la selezione di più mesi su una pagina. – NikiC

+0

L'ho appena provato: Firefox 4 non supporta questo. – NikiC

2

Ecco un esempio di come farlo funzionare:

$(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; 
}; 

E 'difficile codificato per lavorare con 1-12 per semplicità. (La data e l'anno a discesa dovrebbero funzionare automaticamente in base alle funzionalità integrate del browser.)

Questo non dovrebbe influire sulla capacità dell'utente di (ad esempio) digitare "Dec" per dicembre.

0

Si può fare facilmente con javascript. Basta selezionare una casella a discesa selezionata (onfocus) e premere un tasto, se si preme 1, quindi selezionare il primo elemento, 2 secondi e così via. Potrebbe anche essere necessario aggiungere un po 'di ritardo e attendere una seconda pressione del tasto in caso di numeri a più cifre.

In alternativa si può provare qualcosa di non standard:

<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> 

premendo ALT + numero che sarà in grado di selezionare gli elementi nel menu a discesa. Basta aggiungere l'attributo accesskey alle opzioni dinamicamente (JavaScript) alla casella a discesa focalizzata.

+0

Perché questo "non standard"? – NikiC

+0

-1 E davvero non lo apprezzo se la mia risposta viene rubata. Ritornerò al mio voto se rispondi alla tua risposta alla sua forma originale. – NikiC

+0

Non è standard perché non è in standard w3 (duh!) E non è garantito il funzionamento in diversi browser web. Mi sono rubato? Quanti anni hai, 10? Non è una gara, sono abbastanza sicuro che tutti i commenti sono stati pubblicati nello stesso periodo, quindi non ho nemmeno visto la tua risposta mentre stavo scrivendo. –

Problemi correlati