Событие события изменения события дампинга JQuery и событие изменения по умолчанию ввода
У меня есть datepicker
<input type='text' class='inp'>
<script>
$('.inp').datepicker();
$(".inp").on("change",function (){
console.log('inp changed');
});
</script>
Когда я сначала меняю ".inp" вручную, введите там значение, затем сразу же нажимаю на открываемый календарь datepicker. Я получаю двух слушателей событий "change". Сначала из ручного изменения, затем с изменения даты.
Как я могу избежать этого?
Ответы
Ответ 1
Задайте свой ввод readOnly
, это поможет вам изменить значение поля только с помощью значка.
<input type='text' class='inp' readOnly />
затем используйте onSelect
для получения выбранной даты, как показано ниже:
$(function() {
$(".inp").datepicker({
onSelect: function(dateText, inst) {
// alert(dateText);
}
});
});
Ответ 2
Попробуйте использовать функцию onSelect, например:
$(function() {
$( ".datepicker" ).datepicker({
onSelect: function() {
//your code here
}});
Это будет запущено, когда они выбирают дату из календаря, когда они не печатают.
Ответ 3
Вы можете включить onSelect, чтобы вызвать событие изменения в текстовом поле. Таким образом, редактирование даты через текстовое поле или с помощью выбора даты ведет себя одинаково.
$('.inp').datepicker({
onSelect: function() {
return $(this).trigger('change');
}
);
$(".inp").on("change",function (){
console.log('inp changed');
}
Ответ 4
Если вы используете bootprap datepicker, вы можете сделать следующее:
$('.datepicker').datepicker()
.on('changeDate', function(e){
# `e` here contains the extra attributes
});
Подробнее: События Bootprap Datepicker
Ответ 5
Спасибо! Все, но я не мог сделать поле только для чтения, это требование. Поэтому я должен был сам себя осмотреть. Поэтому я отправляю свое окончательное решение. Я развязал 150 мс, а затем снова привязал.
Я сделал плагин jquery для этого
function myfunc(that){
$(that).one('change', function(){
var that = this;
setTimeout(function(){myfunc(that);}, 150);
//some logic
}
)
}
myfunc(".inp");
Ответ 6
Спасибо всем, это то, что я использовал,
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, являющееся значением datepicker, а x2 - объектом datepicker
Ответ 7
Если вы используете сборщик дат jquery, нет необходимости в календарном пожаре.
вы можете запустить событие в текстовом поле "textchanged"