2010-05-05 6 views
7

Desidero utilizzare Jquery datepicker. L'ho configurato utilizzando l'opzione di campo alt. Sto visualizzando D/M/Y nel campo di testo, ma invio di Y-M-D. Finora tutto funziona correttamente, inviando i dati corretti, ecc.jQuery Selezione data in cui l'input di testo è di sola lettura

Tuttavia, desidero impedire all'utente di digitare manualmente una data. Inizialmente avevo impostato il campo INPUT su disattivato, che funzionava in tutti i browser tranne IE. In IE apparirebbe il selettore di date ma non si chiuderà dopo aver fatto clic su una data.

Qualcuno conosce il modo migliore per farlo?

risposta

8

Per impedire all'utente di modificare manualmente l'input, vorrei allegare un evento keypress e restituire false/prevenire il default dal gestore. In questo modo se ha javascript può usare il datepicker, e in caso contrario può modificare manualmente l'input. risposta

$("#input-id").keypress(function (e) 
{ 
    e.preventDefault(); 
}); 
+0

Grazie. Questa è una soluzione davvero concisa e gestisce anche la mancanza di Javascript. –

+2

se si sta percorrendo quella rotta, potrebbe anche essere utile disabilitare il keydown, per evitare backspace, cancellare, ecc. $ ("# input-id"). Keydown (funzione (e) \t {e .preventDefault();}); – dah97765

+0

Ho trovato che la pressione di tasto non era in grado di impedire il backspace, quindi la soluzione dah97765 è la migliore. –

0

Dopo aver disattivato il campo di input, utilizzare il metodo destroy per rimuovere il datepicker. Quando riattivi il campo, ricrea nuovamente il datepicker.

$("#target").datepicker("destroy"); 
3

L'estensione del NC3B:

$("#input-id").keydown(function (e) 
{e.preventDefault();}); 

sarà evitare che i tasti, come backspace, cancellare, ecc In caso contrario, si potrebbe avere una data come il 11/11/2012, e un utente potrebbe tornare indietro a 11/11/201 e tecnicamente, questa è ancora una data valida secondo JS.

+1

Grazie. Questo è meglio della risposta corretta. +1 – Jignesh

+0

La pressione di tasti impedisce anche la copia incolla. almeno funziona per me. – Jignesh

1

Si può anche fare questo:

<input type="text" id="datepicker" name="datepicker" readonly="readonly" /> 

Vedi l'attributo readonly sopra.

Se anche voi volete calendario per visualizzare quando il <input> ha messa a fuoco, aggiungere questo:

$("#datepicker").datepicker({ showOn: 'both' }); 
Problemi correlati