2013-08-23 13 views
5

Ho cercato di aggiungere un selezionatore di date al mio sito che consenta agli utenti di selezionare più date non concorrenti. Multidatespicker sembra fare quello che voglio ma sono arrivato a un punto in cui penso di aver scoperto un bug, in particolare con il suo AltField, che è confermato here. Il bug sembra fermare la visualizzazione dei valori dell'altfield. Se visiti il ​​Multidatepicker demo e ispezioni l'altfield vedrai che mentre appare vuoto i valori vengono visualizzati nel codice.Multi Dates Picker Bug?

Il problema che presenta per me è che non posso modificare date selezionate in precedenza quando si restituisce un record dalla mia App/DB. Quando si passa il valore di altfield alla mia app Rails per l'archiviazione del database, ricevo solo i valori nascosti mostrati nel codice.

Se riesco a far sì che l'altfield mostri correttamente questi valori e mi permetta di modificarli tramite il selettore di date, allora dovrei modificare il backend della mia app.

Nota la correzione suggerita sul link github di cui sopra non risolve questo problema - abilita solo le date di rendering in 'dateVar' come selezionate nel selettore .... non fa nulla per mostrare valori in altField.

Qualcuno ha usato questo e ha avuto lo stesso problema e risolto?

Qualcuno sa come risolvere il problema?

O

Qualcuno può suggerire una buona alternativa che funzionerà bene con un Rails 3 Applicazioni che usano Twitter Bootstrap. È molto importante poter selezionare più date non concorrenti. Ho cercato abbastanza estesamente ma MultiDatesPicker sembra essere una delle uniche opzioni che riesco a trovare.

risposta

3

Il problema è che Multidatespicker non è in ascolto #altField quindi è necessario creare il nostro listener per aggiungere/rimuovere date.

L'idea è di aggiungere valori a un input hidden o readonly e aggiungere/rimuovere date da un altro. Ciò impedisce al cliente di aggiungere date in #altField e di farle sovrascrivere dal plugin.

HTML

<input type="text" id="date"> 

<button type="button" id="addDate">Add dates</button> 

<button type="button" id="removeDate">Remove dates</button> 

<div class="ui-state-error" id="error"></div> 
<br /> 
<input type="text" id="altField" readonly value="2013-08-30,2013-08-31"> 

JAVASCRIPT

E con javascript aggiungiamo semplicemente la data con un tasto (potrebbe essere il KeyUp o qualsiasi cosa la vostra immaginazione può immaginare :)

var dates = $('#altField').val().split(','); 


    $('#datepicker').multiDatesPicker({ 
    dateFormat: "yy-mm-dd", 
    addDates: dates, 
    altField: '#altField' 
    }); 

    $('#addDate, #removeDate').on('click', function() { 
     try { 
      var $date = $('#date'); 
      var addOrRem = $(this).attr('id') === "addDate" ? 'addDates' : 'removeDates'; 

      $('#datepicker').multiDatesPicker(addOrRem, $date.val()); 
      $date.val(''); 
     } catch (e) { 
      var $error = $('#error'); 
      $error.html(e).slideDown(); 
      setTimeout(function() { 
       $error.slideUp(); 
      }, 2000); 

     } 
    }); 

jsFiddle

+0

Wow, questo è quasi perfetto! Grazie. L'unico problema che mi sembra di avere con esso è quando eseguo il rendering di un nuovo modulo senza alcun valore preimpostato. Sembra quindi non consentire la selezione di più date. È così se rimuovi l'attributo value nel tuo esempio jsFiddle. hai qualche idea su come aggiustarlo? La mia conoscenza JS è debole quindi apprezzo molto il tuo aiuto qui. – Raoot

+0

Ecco un fiddle aggiornato: http://jsfiddle.net/pfc2b/8/. La logica è che se non c'è una data, inviamo una stringa vuota invece di una matrice. – L105

+0

Fantastico, funziona perfettamente. Grazie mille per il vostro aiuto. – Raoot

1

Ho scansionato la fonte di MultiDatesPicker. Non trovo alcun metodo che imposta la data dal #altfield. Quindi non è un bug che manca. Anche io non capisco la differenza tra le date preselezionate e l'alt.

Penso che si può fare quello che vuoi con una combinazione di preselezione e l'Altfield:

html

<div id="with-altField"></div> 
    <input type="text" id="altField" value="08/22/2013,08/21/2013"> 
    </div> 

javascript

//first read the values of the #altfield 
var dates = $('#altField').val().split(','); 

//second set your multiDatesPicker with the dates of step 1 and an altfield 
$('#with-altField').multiDatesPicker({ 
    dateFormat: "mm/dd/yy", 
    addDates: dates, 
    altField: '#altField' 
}); 

nb caricare il javascript pronto per il documento

+0

Questo è simile a quello che ho provato e il risultato è che l'altField viene riempito con la data odierna mentre lo stato di origine mostra i valori corretti. Deve esserci qualcosa nella sorgente multidatepicker che sta sovrascrivendo il normale comportamento. Sembra anche disabilitare la possibilità di selezionare più date. – Raoot

+0

Ciao Ryan, controlla questo: http://jsfiddle.net/YwVA9/1/ –

+0

Ah sì, posso vedere cosa stai facendo lì. Ho completamente sostituito il codice nella mia app con il tuo esempio, ma sto ottenendo lo stesso comportamento quindi ci deve essere un conflitto che si verifica da qualche parte. – Raoot