2015-05-07 18 views
6

Ho un modale, illustrato di seguito,perché triggerstrap-datepicker attiva "show.bs.modal" quando viene visualizzato?

https://cl.ly/image/2E3T1q3c3C0E/Image%202015-05-07%20at%204.14.23%20PM.png

Quando seleziono il campo di input che contiene il calendario, l'evento modale bootstrap .on ('show.bs.modal') viene attivato, che è super problematico perché sto prendendo tutti i tipi di azione asincrona quando il modale è mostrato legittimamente. Sono dell'opinione che la modale sia già mostrata e questo evento non dovrebbe sparare.

Ho un ascoltatore sulla manifestazione bootstrap 'show.bs.modal' come riferimento di seguito,

handleModalLaunch:() -> 
    $(@modalClass).on 'show.bs.modal', (event) => 
     return if event.dates 
     promise = new Promise ((resolve, reject) => 
     @setModalData(event) 
     if (@interactionData) 
      resolve(@interactionData) 
     else 
      reject(false) 
    ) 
     promise.then(
     (results) => 
      @trigger 'setRooms', @callBacks 
      @trigger 'setStudentInfo', @callBacks 
     (err) -> 
      err 
    ) 

ed efficace, l'ascoltatore viene attivato di nuovo che viene successivamente chiamando la promessa e associati callback, il innescare l'evento è problematico perché, naturalmente, la modale è già mostrata e non voglio che vengano eseguiti questi callback/promesse.

ho aggiunto return if event.dates (event.dates essendo una struttura unica per l'evento DatePicker), in fondo al corto circuito di questo codice nel caso in cui il DatePicker attivato l'evento modale spettacolo, ma, naturalmente, questo è hacky e mi piacerebbe Mi piace capire meglio perché lo stesso datepicker stia attivando l'evento show. Potenzialmente, dal momento che il mio show ascoltatore è legato alla classe del modale, l'atto di mostrare il datepicker probabilmente eredita il target del modale genitore ed è probabilmente esso stesso un modale, cioè, il modale (datepicker) viene mostrato e dal datepicker eredita dal modale genitore, l'evento si innesca come se fosse il modale genitore 'mostrato'. Ho completamente confuso questo? (In realtà, sembra più chiaro per me ora, ma ancora bisogno di capire come risolvere il problema.) Cheers,

JD

+0

Così lo fa riaprire il modale o non accade nulla? – CENT1PEDE

+0

@GreenFox Ho aggiunto alcuni commenti per sperare di darvi ulteriori informazioni. – John

risposta

16

Questo è un bug nella libreria di selezione data. Puoi rintracciarlo su github here. Non c'è alcuna soluzione c'è dato da @kroeder

$("#my-datepicker").datepicker().on('show.bs.modal', function(event) { 
    // prevent datepicker from firing bootstrap modal "show.bs.modal" 
    event.stopPropagation(); 
}); 
1

Utilizzare questa

$(date-picker-selector).on("show", function(e){ 
    e.preventDefault(); 
    e.stopPropagation(); 
}).on("hide", function(e){ 
    e.preventDefault(); 
    e.stopPropagation(); 
}); 
0

Prova questo:

modal.on('show.bs.modal', function(e) { 
    if (e.namespace === 'bs.modal') { 
     // Your code here 
    } 
}); 
Problemi correlati