2014-12-16 15 views
11

cambiamento di default di ingresso ho datepickerJquery cambiamento datepicker trigger di evento e l'evento

<input type='text' class='inp'> 
<script> 
    $('.inp').datepicker(); 

    $(".inp").on("change",function(){ 
    console.log('inp changed'); 
    }); 
</script> 

Quando ho primo cambiamento '.inp' digitare manualmente c'è un valore, quindi subito clicco su datepicker 'aperto calendario. Ottengo due ascoltatori di eventi 'change'. Prima dal cambio manuale, poi dal cambio datepicker. Come posso evitare questo?

+0

non collegato: Il tuo tag di chiusura è sbagliato, dovrebbe essere ''. L'attributo di impostazione –

risposta

11

Imposta il tuo ingresso readOnly, che vi aiuterà a cambiare il valore di campo attraverso solo icona.

<input type='text' class='inp' readOnly /> 

quindi utilizzare onSelect per ottenere la data selezionata, come segue:

$(function() { 
    $(".inp").datepicker({ 
     onSelect: function(dateText, inst) { 
      // alert(dateText); 
     } 
    }); 
}); 
+0

'readOnly' può disabilitare la convalida (se presente) per questo campo. A mio parere, la soluzione migliore è impostata attr' onkeydown = "false" ' –

6

Provare a utilizzare la funzione onSelect come:

$(function() { 
    $(".datepicker").datepicker({ 
     onSelect: function() { 
     //your code here 
    }}); 

Questo sarà licenziato quando selezionano una data dal calendario non quando sta digitando.

0

Se si utilizza il bootstrap DatePicker è possibile effettuare le seguenti operazioni:

$('.datepicker').datepicker() 
    .on('changeDate', function(e){ 
     # `e` here contains the extra attributes 
}); 

Per maggiori dettagli vedere: Bootstrap Datepicker events

0

Grazie! Tutti, ma non potrei rendere il campo di sola lettura, questo è un requisito. Quindi ho dovuto riconsiderare me stesso. Così ho pubblicato la mia soluzione finale. Ho smascherato per 150 ms, quindi lego di nuovo. I made a jquery plugin for this

function myfunc(that){ 
     $(that).one('change', function(){ 
       var that = this; 
       setTimeout(function(){myfunc(that);}, 150); 
       //some logic 
      } 
     ) 
} 

myfunc(".inp"); 
-1

se si utilizza selezione data di jQuery non c'è bisogno di fuoco evento calendario. è possibile attivare l'evento sulla casella di testo "textchanged"

+0

se stai usando la casella di testo in calender, allora devi usare questo approccio sopra. –

2

È possibile avere onSelect per attivare l'evento di modifica nel campo di testo. In questo modo, la modifica della data tramite la casella di testo o il selettore della data si comportano allo stesso modo.

$('.inp').datepicker({ 
    onSelect: function() { 
    return $(this).trigger('change'); 
    } 
); 

$(".inp").on("change",function(){ 
    console.log('inp changed'); 
} 
0

Grazie a tutti, questo è quello che ho usato, però,

function myfunction(x,x2){ 
    var date1 = new Date(x); 
    var MyDateString; 
    MyDateString = date1.getFullYear()+ '/' + ('0' + (date1.getMonth()+1)).slice(-2) + '/' + ('0' + date1.getDate()).slice(-2); 
    x2.value= MyDateString;  
} 

x, essendo il valore DatePicker e x2 essendo l'oggetto datepicker