Я пытаюсь использовать простой datepicker в приложении MVC и должен вызывать datepicker, когда одно из полей ввода имеет id
оканчивающийся на Date
.
Имена полей выбираются из моделей просмотра, и я предпочел бы иметь как можно больше дополнительной информации (например, я мог бы добавить другой класс для каждого ввода и создать сценарий datepicker для каждого из них, но это похоже на перебор).
Я могу создать массив элементов и вызывать каждый из них индексом.
var dateSelect = [];
$("[id$='Date']").each(function() {
dateSelect.push('#' + $(this).attr('id'));
console.log(dateSelect);
});
$(dateSelect[0]).datepicker({ format: "dd/mm/yyyy" });
Как я могу изменить это, чтобы вызывать datepicker для каждого экземпляра поля Date, не зная, сколько их в массиве?
например $(dateSelect[ANY]).datepicker({ format: "dd/mm/yyyy" });
Я пробовал использовать each
и for loop
но датпикер кажется только, если он вызывается непосредственно после элемента поля.
Судя по первым нескольким комментариям, я, возможно, не был уверен в том, почему мне нужно ответить на этот вопрос.
Когда я вызываю datepicker на странице с несколькими полями даты, любые действия, вызываемые на datepicker (например, onChange), применяются только к первому экземпляру независимо от того, какое поле фактически находится в фокусе.
Я думал, что использование массива элементов поля упростит вызов каждого из них по отдельности. Мне нужно знать, как сделать вызов неизвестного числа элементов в массиве, как в примере:
$(dateSelect[ANY]).datepicker({ format: "dd/mm/yyyy" });
Вопрос заключается не в том, как прикреплять фидапинг к нескольким полям.
Следующий код работает. Первоначальная проблема, с которой я столкнулся, была вызвана дампикером, имеющим два разных образца, показывающих разные способы скрытия. По какой-то причине я пытался использовать только прикрепленный к первому экземпляру поля даты на странице.
$("[id$='DateInput']").datepicker({ format: "dd MM yyyy" }).focus(function() {
$(this).on('changeDate', function () {
$(this).datepicker('hide');
})
});
Вам не нужно итерации. Если вы вызываете .datepicker()
в коллекции, она будет применяться ко всем элементам коллекции:
$("[id$='Date']").datepicker();
Если вы добавите класс ко всем этим входам, таким как .datepicker
вам не нужно будет создавать скрипт datepicker, для каждого из которых будет только одна ссылка на класс, который вы используете.
$(function(){ $(".datepicker").datepicker(); });
Почему бы просто не создать экземпляр datepicker
в каждой итерации each
из each
?
$("[id$='Date']").each(function() {
$(this).datepicker({ format: "dd/mm/yyyy" });
});
this
чтобы ссылаться на цель события.