javascript - español - Bootstrap Datepicker en cambio disparando 3 veces
datepicker format (11)
Como algunos ya han mencionado, usa esto:
$(''#calendar'').on("changeDate", function() {
});
El truco es usar changeDate
lugar de change
.
Hola, he estado tratando de obtener la fecha de un selector de fecha de arranque y he podido, pero parece que se dispara 3 veces. NOTA: Este no es un selector de fecha jquery sino un selector de fecha de arranque.
Utilizando este selector de fecha: https://github.com/eternicode/bootstrap-datepicker , no eyecon.ro antiguo.
$(".date-picker").on("change", function(e) {
contents = $(this).val();
id = $(this).attr(''id'');
console.log("onchange contents: " + contents);
console.log("onchange id: " + id);
});
HTML:
<input id="start_date" type="text" data-date-format="yyyy-mm-dd" class="date-picker form-control" />
He usado algunas otras opciones además del cambio, como
$(''.date-picker'').datepicker().change(function(){};
Pero esto no cierra el selector de fechas, esperando que haya una solución fácil para esto. Gracias
Deberías estar usando el evento "changeDate". Por ejemplo:
var datePicker = $(''.date-picker'').datePicker().on(''changeDate'', function(ev) {
//Functionality to be called whenever the date is changed
});
Por favor vea la documentación here para más información sobre este evento.
Obtenga el conteo global de variables y verifique si es igual a 0 y luego ejecute su función.
var count=0;
$( "#Id" ).datepicker({ minDate: 0}).on(''change'',function (){
if(count==0)
validity();//any function
count=1;
});
validity(){ count=0;}
Parece como si al verificar el evento de change
, si el cambio fuera de la interacción real del usuario , el evento de cambio contenga un valor para originalEvent
.
El evento NO contiene este valor si la entrada se cambió a través de JS: $obj.val(''1990-03-07'').change()
y lo mismo con bootstrap-datepicker
Así es como lo configuro:
Configuración inicial genérica
// General selector for date inputs
var $obj = $(''input[type="date"]'');
$obj.datepicker({
// options here, not important for this example
});
Manejar cambios específicos bootstrap-datepicker
$obj.datepicker().on(''changeDate'', function (event) {
handleInputDateAndTimeChange(event);
});
Ahora, lidiar con los cambios de interacción del usuario
$(''input[type="date"], input[type="time"]'').change(function (event) {
// This checks if change was initiated by user input and NOT JS
if(event.originalEvent !== undefined) {
handleInputDateAndTimeChange(event);
}
});
Y finalmente, aquí está la función handleInputDateAndTimeChange
function handleInputDateAndTimeChange(event) {
var $input = $(event.target);
// Do what you want with $input object here...
}
Por favor use la función changeDate en lugar del cambio.
Probé la respuesta de # pgee70 y no me funciona. Así que esta es mi solución, espero su ayuda.
var send=true;
$(''.input-group.date'').datepicker({
todayBtn: "linked",
keyboardNavigation: false,
forceParse: false,
language: ''es-ES'',
weekStart: 1,
format: ''dd/mm/yyyy'',
enableOnReadonly:false,
calendarWeeks: true,
autoclose: true,
todayHighlight:true
}).on("changeDate", function(e) {
if(send){
modificarFechaAplicacionCliente($("#input_filtro_fecha_cliente").val());
send=false;
}
setTimeout(function(){send=true;},200);
});
No es una solución idónea, pero es trabajo.
Similar a la respuesta anterior, pero debe usar el selector de fechas a menos que haya cambiado el nombre de la función:
var datePicker = $(''.date-picker'').datepicker().on(''changeDate'', function(ev) {
//Functionality to be called whenever the date is changed
});
Esto funciona para mí, excepto en mi caso, cambié el nombre de la función a datepickerBootstrap para evitar el choque con JQuery. Entonces se convertiría en:
var datePicker = $(''.date-picker'').datepickerBootstrap().on(''changeDate'', function(ev) {
// On change functionality
});
no soluciona el problema, pero estaba usando el selector de fechas para enviar a través de una publicación de ajax, por lo que los 3 eventos de cambio me estaban causando problemas: el 3er evento siempre fallaba. incluso si la documentación dice que se debe usar un evento changeDate, no me parece correcto disparar el evento change de la etiqueta de entrada 3 veces. ¡El valor no cambia 3 veces!
Escribí una función simple de ''rebotar'' para solucionar el problema. no soluciona el problema, lo que se debe a que se activaron múltiples eventos de cambio desde los métodos: setValue (línea 508) _setDate: (línea 1048) y setValue (línea 508) (versión 1.3.0) del widget.
var lastJQueryTS = 0 ;// this is a global variable.
....
// in the change event handler...
var send = true;
if (typeof(event) == ''object''){
if (event.timeStamp - lastJQueryTS < 300){
send = false;
}
lastJQueryTS = event.timeStamp;
}
if (send){
post_values(this);
}
es bastante simple, solo encuentra el ''evento'' de jquery, y se asegura de que los valores en una ventana de 300ms sean ignorados. en mi prueba todo esto sucedió en 30 mseg aproximadamente.
poco molesto .. mi código era:
var c=0;var send=false;
$(document).ready(function() {
jQuery( ".ed" ).datepicker({
format: "yyyy-mm-dd",
autoclose:!0
}).on(''change'',function() {
if(c==2){
c=0;
send=true;
}else{
c++;
send=false;
}
});
});
var pickerFireCount = 0;
function checkSelectedDateIsHollyday(rId) {
pickerFireCount++;
if (pickerFireCount == 3) {
if (!selectedDateIsHolyday(rId)) {
showInfoMessage(''The date you selected is a holiday.'');
pickerFireCount = 0;
}
}
}