2013-03-03 16 views
5

Mam dane wejściowe, w których chcę edytować datę. Kiedy wartość wejścia zmienia się, chcę wykonać wywołanie zwrotne.bootstrap-datepicker nie wybiera zmiany zdarzenia na wejściu

Jeśli zadzwonię do funkcji datepicker (z bootstrap-datepicker https://github.com/eternicode/bootstrap-datepicker), nie mogę już podpinać się do zdarzenia zmiany. (Dziwne dość, inne wydarzenia wydają się działać ok)

To, co starałem dotąd:

(używając kręgosłup)

events: { 
    'changeDate :input' : 'onUpdateField' 
}, 

lub korzystając bezpośrednio jQuery

$('#Fundacion').on('change', this.onUpdateField); 

Jeśli Po prostu komentuję następującą linię:

$('#Fundacion').datepicker({ 
    autoclose : true, 
[...] 

Zdarzenie zostanie wywołane.

Z drugiej strony wywołanie metody changeDate evet, ale tylko wtedy, gdy data jest zmieniana za pomocą myszy lub strzałek. Chcę złapać zdarzenie, gdy użytkownik wpisze inną datę.

Próbowałem rzucić okiem na źródło (https://github.com/eternicode/bootstrap-datepicker/blob/master/js/bootstrap-datepicker.js), ale nie mogłem znaleźć miejsca, w którym może to być "połknięcie" zdarzenia zmiany.

Odpowiedz

7

Nie jest to zalecany sposób, ale brudny obejście. Po prostu sprawdzaj pole daty po 500 milisekundach (lub zgodnie z wymaganiami).

var current = $('.transaction-date').val(); 
function keep_checking() { 

    if (current != $('.transaction-date').val()) { 
     alert('change happened'); 
     current = $('.transaction-date').val(); 
    } 
    setTimeout(keep_checking, 500); 
} 
keep_checking(); 

UPDATE

Jeśli używasz następujące biblioteki to będzie ogień zdarzenie „CHANGEDATE” gdy data jest zmieniana.Wygląd i dotyk jest bardzo podobna do datepicker eternicode

http://www.eyecon.ro/bootstrap-datepicker/

Przykład użycia:

jQuery('#dp1').datepicker().on('changeDate', function(ev){ 
    alert('date is changed'); 
}); 
+0

Czy jest możliwe wywołanie zdarzenia 'changeDate' po zmianie wartości wejściowej za pomocą kodu? –

0

W moim przypadku wystarczyło wykonać dwa proste kroki:

  1. Dodaj zmiany detektor zdarzeń do wejścia (przechwyci zdarzenie, gdy użytkownik wpisze inną datę)

    $('#dateInput').on(change, doSomethingOnChange); 
    
  2. Dodaj datepicker zdarzenie CHANGEDATE (będzie powodować zmiany zdarzenie z pierwszego etapu, gdy data jest zmieniana za pomocą myszki lub strzałek)

    input.datepicker().on('changeDate', function(){ 
        $(this).trigger('change'); 
    }); 
    
Powiązane problemy