problem z wydarzeniem jQuery Datepicker onchange

Mam kod JS, w którym po zmianie pola wywołuje procedurę wyszukiwania. Problem polega na tym, że nie mogę znaleźć żadnych zdarzeń jQuery, które zostaną uruchomione, gdy Datepicker zaktualizuje pole wprowadzania.

Z jakiegoś powodu Zdarzenie change nie jest wywoływane, gdy Datepicker aktualizuje pole. Kiedy kalendarz wyskakuje, zmienia ostrość, więc nie mogę tego użyć. Jakieś pomysły?

Author: NightOwl888, 2011-06-24

16 answers

Możesz użyć datepicker ' s onSelect event .

$(".date").datepicker({
    onSelect: function(dateText) {
        console.log("Selected date: " + dateText + "; input's current value: " + this.value);
    }
});

Przykład na żywo :

$(".date")
.datepicker({
    onSelect: function(dateText) {
        console.log("Selected date: " + dateText + "; input's current value: " + this.value);
    }
})
.on("change", function() {
    console.log("Got change event from field");
});
<link href="http://code.jquery.com/ui/1.9.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<input type='text' class='date'>
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>

Niestety, onSelect zostanie wywołana po wybraniu daty, nawet jeśli się nie zmieniła. Jest to wada projektowa w datepicker: zawsze uruchamia onSelect (nawet jeśli nic się nie zmieniło), a nie uruchamia żadnego zdarzenia na bazowym wejściu przy zmianie. (Jeśli spojrzysz w kod tego przykładu, to nasłuchujemy zmian, ale nie są one podniesiony.) Powinno to prawdopodobnie wywołać zdarzenie na wejściu, gdy coś się zmieni (prawdopodobnie zwykłe Zdarzenie change lub ewentualnie specyficzne dla datepickera).


Jeśli chcesz, oczywiście możesz zrobić change Zdarzenie na input ogień:

$(".date").datepicker({
    onSelect: function() {
        $(this).change();
    }
});

, który odpali change na podstawie input dla dowolnego Handlera podłączonego przez jQuery. Ale znowu, to zawsze odpala go. Jeśli chcesz odpalić tylko na prawdziwej zmianie, musisz zapisać poprzednią wartość (prawdopodobnie przez data) i porównaj.

Przykład na żywo :

$(".date")
.datepicker({
    onSelect: function(dateText) {
        console.log("Selected date: " + dateText + "; input's current value: " + this.value);
        $(this).change();
    }
})
.on("change", function() {
    console.log("Got change event from field");
});
<link href="http://code.jquery.com/ui/1.9.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<input type='text' class='date'>
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
 382
Author: T.J. Crowder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-05 05:00:35

T. J. Crowder ' s answer ( https://stackoverflow.com/a/6471992/481154 ) jest bardzo dobry i nadal pozostaje dokładny. wywołanie zdarzenia zmiany w funkcji onSelect jest tak bliskie, jak się da.

Istnieje jednak właściwość nice na obiekcie datepicker (lastVal), która pozwoli Ci warunkowo wywołać zdarzenie change tylko przy rzeczywistych zmianach bez konieczności samodzielnego przechowywania wartości:

$('#dateInput').datepicker({
     onSelect: function(d,i){
          if(d !== i.lastVal){
              $(this).change();
          }
     }
});

Następnie po prostu obsłuż zdarzenia zmiany jak normalnie:

$('#dateInput').change(function(){
     //Change code!
});
 72
Author: theChrisKent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:16

Twoje szukanie zdarzenia onSelect w obiekcie datepicker:

$('.selector').datepicker({
   onSelect: function(dateText, inst) { ... }
});
 14
Author: locrizak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-01 07:42:09
$('#inputfield').change(function() { 
    dosomething();
});
 12
Author: user583576,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-24 19:21:38

Napisałem to, ponieważ potrzebowałem rozwiązania, aby wywołać zdarzenie tylko wtedy, gdy Data się zmieniła.

To proste rozwiązanie. Za każdym razem, gdy okno dialogowe się zamyka, testujemy, czy DANE się zmieniły. Jeśli tak, uruchamiamy zdarzenie niestandardowe i resetujemy zapisaną wartość.
$('.datetime').datepicker({
    onClose: function(dateText,datePickerInstance) {
        var oldValue = $(this).data('oldValue') || "";
        if (dateText !== oldValue) {
            $(this).data('oldValue',dateText);
            $(this).trigger('dateupdated');
        }
    }
});

Teraz możemy podłączyć obsługę tego niestandardowego wydarzenia...

$('body').on('dateupdated','.datetime', function(e) {
    // do something
});
 12
Author: CodeDreamer68,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-03 02:55:00

Używam Bootstrap-datepicker i Żadne z powyższych rozwiązań nie działało na mnie. Ta odpowiedź mi pomogła ..

Zdarzenie Bootstrap datepicker change date nie uruchamia się podczas ręcznej edycji dat lub usuwania daty

Oto co zastosowałem:

 $('.date-picker').datepicker({
     endDate: new Date(),
     autoclose: true,
 }).on('changeDate', function(ev){
        //my work here
    });
Mam nadzieję, że to pomoże innym.
 10
Author: NMathur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:54

Wiem, że to stare pytanie. Ale nie mogłem dostać jQuery $(to).Zdarzenie change () poprawnie odpala onSelect. Więc poszedłem z następującym podejściem do odpalenia zdarzenia zmiany przez vanilla js.

$('.date').datepicker({
     showOn: 'focus',
     dateFormat: 'mm-dd-yy',
     changeMonth: true,
     changeYear: true,
     onSelect: function() {
         var event;
         if(typeof window.Event == "function"){
             event = new Event('change');
             this.dispatchEvent(event);
         }   else {
             event = document.createEvent('HTMLEvents');
             event.initEvent('change', false, false);
             this.dispatchEvent(event);
         }
     }
});
 5
Author: tstrand66,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-17 12:26:44

Na jQueryUi 1.9 udało mi się uruchomić go poprzez dodatkową wartość danych i kombinację funkcji beforeShow i onSelect:

$( ".datepicker" ).datepicker({
    beforeShow: function( el ){
        // set the current value before showing the widget
        $(this).data('previous', $(el).val() );
    },

    onSelect: function( newText ){
        // compare the new value to the previous one
        if( $(this).data('previous') != newText ){
            // do whatever has to be done, e.g. log it to console
            console.log( 'changed to: ' + newText );
        }
    }
});

U mnie działa:)

 4
Author: Alex Kogan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-06 16:09:15

Spróbuj tego

$('#dateInput').datepicker({
 onSelect: function(){
       $(this).trigger('change');
      }
 }});

Mam nadzieję, że to pomoże:)

 3
Author: mike tracker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-16 10:59:49

Try:

$('#idPicker').on('changeDate', function() {
    var date = $('#idPicker').datepicker('getFormattedDate');
});
 3
Author: GiorgosBarkos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-13 15:36:42

Instrukcja mówi:

apply.daterangepicker: Triggered when the apply button is clicked, or when a predefined range is clicked

Więc:

$('#daterange').daterangepicker({
  locale: { cancelLabel: 'Clear' }  
});

$('#daterange').on('apply.daterangepicker', function() {
  alert('worked!');
});
Mi pasuje.
 1
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-10 21:40:31

Moje solucje:

var $dateInput = $('#dateInput');

$dateInput.datepicker({
    onSelect: function(f,d,i){
        if(d !== i.lastVal){
            $dateInput.trigger("change");
        }
    }
}).data('datepicker');

$dateInput.on("change", function () {
   //your code
});
 1
Author: Andriy Petrusha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-29 20:02:24

Moje rozwiązanie to:

events: {
    'apply.daterangepicker #selector': 'function'
}
 1
Author: Daniel Ortegón,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-18 09:19:21

DatePicker wybrany kod zdarzenia zmiany wartości poniżej

/* HTML Part */
<p>Date: <input type="text" id="datepicker"></p>

/* jQuery Part */
$("#datepicker").change(function() {
                selectedDate= $('#datepicker').datepicker({ dateFormat: 'yy-mm-dd' }).val();
                alert(selectedDate);        
            });
 0
Author: Hemang Rami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-14 09:12:45

Jeśli używasz wdcalendar to ci pomoże

 $("#PatientBirthday").datepicker({ 
        picker: "<button class='calpick'></button>",
        onReturn:function(d){
          var today = new Date();
          var birthDate = d;
          var age = today.getFullYear() - birthDate.getFullYear();
          var m = today.getMonth() - birthDate.getMonth();
          if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
            age--;
          }

          $('#ageshow')[0].innerHTML="Age: "+age;
          $("#PatientBirthday").val((d.getMonth() + 1) + '/' + d.getDate() + '/' +  d.getFullYear());
        }
      }); 

Event onReturn działa dla mnie

Hope this help

 0
Author: mavirroco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-13 18:57:38

Myślę, że twój problem może leżeć w tym, jak Twój datepicker jest ustawiony. Dlaczego nie odłączysz wejścia?.. nie stosować leku altField. Zamiast tego jawnie ustawia wartości, gdy zostanie wywołany onSelect. Daje to kontrolę nad każdą interakcją; pole tekstowe użytkownika i datepicker.

Uwaga: czasami trzeba włączyć rutynę .Zmień() i nie .onSelect () ponieważ onSelect może być wywołany na różnych interakcjach, których się nie spodziewasz.

Pseudo Kod:

$('#date').datepicker({
    //altField: , //do not use
    onSelect: function(date){
        $('#date').val(date); //Set my textbox value
        //Do your search routine
    },
}).change(function(){
    //Or do it here...
});

$('#date').change(function(){
    var thisDate = $(this).val();
    if(isValidDate(thisDate)){
        $('#date').datepicker('setDate', thisDate); //Set my datepicker value
        //Do your search routine
    });
});
 0
Author: Jeremy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-24 23:02:03