Выполните итерацию по нескольким элементам одного типа для средства выбора даты JQuery

0

Я пытаюсь использовать простой 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
asp.net-mvc

3 ответа

2
Лучший ответ

Вам не нужно итерации. Если вы вызываете .datepicker() в коллекции, она будет применяться ко всем элементам коллекции:

http://jsfiddle.net/z88KG/

$("[id$='Date']").datepicker();
  • 0
    Это то, что я делал, но если на странице более одного поля даты, дополнительная логика (например, onChange) применяется только к первому экземпляру. Мне нужно иметь возможность звонить каждому по отдельности.
  • 0
    Можете показать функцию onChange? Я предполагаю, что вам просто нужно использовать this чтобы ссылаться на цель события.
Показать ещё 1 комментарий
0

Если вы добавите класс ко всем этим входам, таким как .datepicker вам не нужно будет создавать скрипт datepicker, для каждого из которых будет только одна ссылка на класс, который вы используете.

$(function(){ $(".datepicker").datepicker(); });

Пример скрипта

  • 0
    На самом деле это не отличается от использования подстановочного знака конца строки в имени поля. Это не меняет того факта, что я не могу вызывать каждый экземпляр средства выбора даты по отдельности.
0

Почему бы просто не создать экземпляр datepicker в каждой итерации each из each?

$("[id$='Date']").each(function() {
    $(this).datepicker({ format: "dd/mm/yyyy" });
});
  • 0
    Это все еще не решает вопрос о том, как я вызываю каждый экземпляр, не зная, сколько их.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню