2009-06-22 9 views
14

Ho un Datepicker e un Timepicker in 2 campi di input separati, ma ho bisogno di combinare i 2 campi in input per una chiamata al database. Volevo sapere se potevo usare solo 1 campo di input per entrambi i controlli?jQuery Datepicker e Timepicker per lo stesso campo di input per popup uno dopo l'altro

prima chiamare il datepicker e l'utente farebbe clic sulla data desiderata e inserirà il valore, quindi il timer visualizzerà popup e aggiungerà la data selezionata dall'utente nella prima azione.

sto usando le jQuery UI Datepicker e Timepickr plug-in

così ho qualcosa di simile

<input class="datepicker">2009-06-22</input> 
<input class="timepicker">12:00:00</input> 

ma vorrei qualcosa di simile

<input class="datetimepicker">2009-06-22 12:00:00</input> 

<script type="text/javascript"> 
// Date and Time picker same input field 
$("#datepicker").datepicker({ 
    dateFormat: 'yy-mm-dd', 
    onClose: function(dateText, inst) { 
     var tempDate = $("#datepicker").val(dateText); 
     $("#datepicker").timepickr({ 
     onClose: function(timeText, inst) { 
      var tempTime = $("#datepicker").val(dateText); 
      alert("Temp Time: '" + tempTime.val() + "'"); 
      $("#datepicker").val(tempDate.val() + ' ' + tempTime.val()); 
     } 
     });         
    } 
});    
</script> 
+0

Ah, zolla. Ho sbagliato a inserire il link lì, eccolo di nuovo ... [jQuery Timepicker mod] (http://puna.net.nz/timepicker.htm) – Fentex

risposta

0

Ecco un'alternativa:

http://www.r-ip.ru/dev/datetimepicker/index.html

$('#datetimepicker').datetimepicker({ 
    dateFormat: 'yy-mm-dd', 
    timeFormat: ' hh:ii:ss' 
}); 
+1

Il selettore Date Time su quella pagina ha ciò che l'autore ha chiesto. .. –

+0

Questo non è stato dichiarato. Inoltre, l'interfaccia per il time-picker sul link fornito è terribile. Mi ci sono voluti alcuni secondi per capire che facendo clic su un valore lo si aumenta. Ad ogni modo, ho rimosso il mio voto negativo. – Sampson

+1

Sono d'accordo che ha quello che ho chiesto ma non con i plug-in che sto usando e che vorrei usare. La soluzione che hai fornito è buona, ma sarei d'accordo sul fatto che i controlli del tempo sono un po 'confusi. Grazie però –

1

È possibile associare un evento all'evento onClose() di DatePicker. Apri il tuo time picker. Lascia che il datepicker scriva il valore base dell'input e fa in modo che il timepicker aggiunga il suo valore seguendo uno spazio allo stesso input.

  1. Associare il selettore di data all'immissione.
  2. Collegare il metodo per aprire il timepicker all'evento .onClose() del selezionatore di date.
  3. Aggiunge il valore del time-picker (con uno spazio precedente) al valore di input.

Aggiornamento: il seguente è un aggiornamento risultante da una domanda aggiornata.

La documentazione fornisce un breve esempio su come associare un evento/azione alla chiusura del datepicker:

$('.selector').datepicker({ 
    onClose: function(dateText, inst) { ... } 
}); 

In questo esempio, è possibile utilizzare la funzione seguente "onClode:" scrivere il valore all'input e popup il timepicker.

$(".selector").datepicker({ 
    onClose: function(dateText, inst) { 
    $(".selector").val(dateText); 
    // Raise Timepickr 
    } 
}); 
+0

Mi piace il flusso di questa opzione ma non ho mai legato nulla. Ho modificato il mio post in alto per mostrarti il ​​codice che sto usando. Molto semplice –

+0

hmm come chiamo il timepicker? –

+0

Mi dispiace, non lo so. Non ho mai usato quel particolare plugin di terze parti. Dovresti consultare la documentazione per questo, o contattare l'autore del plugin. In tutta onestà, potrebbe essere più facile cercare un diverso plug-in di terze parti che includa sia la data che l'ora in uno: qualcosa come http://razum.si/jQuery-calendar/TimeCalendar.html o il plugin menzionato nella risposta di Alexander . – Sampson

0

Si può provare a combinare i fattori produttivi da entrambi i controlli in uno come

$("#datetime").focus(function() { 
    var mydate = $("#date").val(); 
    var mytime = $("#time").val(); 
    if(mydate && mytime && !this.value) { 
     this.value = mydate + " " + mytime; 
    } 
}); 
+0

hmm interessante, grazie –

16

vorrei raccomandare Any+Time(TM), in cui è possibile combinare la data/ora in un unico campo con un singolo facile da usare (e veloce!) selezionatore di data/ora.

+0

Grazie questa è una bella aggiunta –

+0

La versione 4 è stata appena rilasciata, con molte nuove funzionalità incluso il supporto per TIME ZONES (prova a trovarlo in qualsiasi altro selettore!), selettori jQuery/concatenamento e rimozione facile (per ridurre le perdite di memoria e supportare pagine più dinamiche). Visita http://www.ama3.com/anytime/ per saperne di più e scarica il codice. Si prega di utilizzare il link di contatto su quel sito in caso di problemi o suggerimenti. Grazie! –

+2

Andrew, ho appena iniziato a utilizzare il selettore AnyTime sul tuo suggerimento. Strumento fantastico! :) Se qualcun altro trova questo post, e sta usando jqgrid con la modifica in linea, il selettore AnyTime non funziona a priori. Se apri un selettore e quindi chiudi la riga, quindi torni allo stesso campo di selezione, visualizzerai un errore come "Impossibile creare un altro selettore AnyTime". Il modo in cui ho trovato di risolvere questo problema era di passare \t $ ('input'). AnyTime_noPicker(); al oneditfunc di editRow(). – jessica

0

Si prega di controllare il link.

Ho aggiornato qualche problema di layout e ha aggiunto secondo cursore, che sarà attivo se {showTime:true, time24h:true}

È possibile trovare quello originale a Google Code.

+0

Avete qualche demo pls? –

1

Non jQuery, ma funziona bene per un calendario nel tempo: JavaScript Date Time Picker.

Basta legare l'evento click di pop up:

$("#date").click(function() { 
    NewCssCal($(this).attr('id'), 'mmddyyyy', 'dropdown', true, 12); 
}); 

Personalmente trovo questo molto più facile da seguire. Ma ovviamente hai così tante opzioni con più plug-in jQuery disponibili per fare il tuo lavoro.