Я использую несколько форм на одной странице. Все формы используют datepicker
с теми же настройками. Поскольку я не могу использовать один и тот же ID
для двух элементов, мне приходится копировать код. Есть ли лучший способ сделать это?
DEMO http://jsfiddle.net/Fa8Xx/1112/
$("#datepicker1").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: 0,
numberOfMonths: 1,
onClose: function (selectedDate) {
var d = new Date(selectedDate);
d.setDate(d.getDate() + 90);
$("#datepicker2").datepicker("option", "minDate", selectedDate);
$("#datepicker2").datepicker("option", "maxDate", d);
}
});
$("#datepicker2").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: +1,
numberOfMonths: 1,
onClose: function (selectedDate) {
$("#datepicker1").datepicker("option", "maxDate", selectedDate);
}
});
$("#datepicker3").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: 0,
numberOfMonths: 1,
onClose: function (selectedDate) {
var d = new Date(selectedDate);
d.setDate(d.getDate() + 90);
$("#datepicker4").datepicker("option", "minDate", selectedDate);
$("#datepicker4").datepicker("option", "maxDate", d);
}
});
$("#datepicker4").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: +1,
numberOfMonths: 1,
onClose: function (selectedDate) {
$("#datepicker3").datepicker("option", "maxDate", selectedDate);
}
});
$("#datep
icker5").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: 0,
numberOfMonths: 1,
onClose: function (selectedDate) {
var d = new Date(selectedDate);
d.setDate(d.getDate() + 90);
$("#datepicker6").datepicker("option", "minDate", selectedDate);
$("#datepicker6").datepicker("option", "maxDate", d);
}
});
$("#datepicker6").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: +1,
numberOfMonths: 1,
onClose: function (selectedDate) {
$("#datepicker5").datepicker("option", "maxDate", selectedDate);
}
});
$("#datepicker7").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: 0,
numberOfMonths: 1,
onClose: function (selectedDate) {
var d = new Date(selectedDate);
d.setDate(d.getDate() + 90);
$("#datepicker8").datepicker("option", "minDate", selectedDate);
$("#datepicker8").datepicker("option", "maxDate", d);
}
});
$("#datepicker8").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: +1,
numberOfMonths: 1,
onClose: function (selectedDate) {
$("#datepicker7").datepicker("option", "maxDate", selectedDate);
}
});
Поскольку все они разные, или, по крайней мере, close
callback и mindate
, вы можете определить общий объект настроек и использовать его во всех случаях, чтобы упростить
var settings = {
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
numberOfMonths: 1
}
$(".datepicker1").datepicker($.extend(settings, {
minDate: 0,
onClose: function (selectedDate) {
var d = new Date(selectedDate);
d.setDate(d.getDate() + 90);
$(".datepicker2", $(this).closest('form')).datepicker("option", "minDate", selectedDate);
$(".datepicker2", $(this).closest('form')).datepicker("option", "maxDate", d);
}})
);
$(".datepicker2").datepicker($.extend(settings, {
minDate: 1,
onClose: function (selectedDate) {
$(".datepicker1", $(this).closest('form')).datepicker("option", "maxDate", selectedDate);
}})
);
$(".datepicker3").datepicker($.extend(settings, {
minDate: 0,
onClose: function (selectedDate) {
var d = new Date(selectedDate);
d.setDate(d.getDate() + 90);
$(".datepicker4", $(this).closest('form')).datepicker("option", "minDate", selectedDate);
$(".datepicker4", $(this).closest('form')).datepicker("option", "maxDate", d);
}})
);
$(".datepicker4").datepicker($.extend(settings, {
minDate: 1,
onClose: function (selectedDate) {
$(".datepicker3", $(this).closest('form')).datepicker("option", "maxDate", selectedDate);
}})
);
Установите класс css для каждого из элементов и вызовите.datepicker() для этого класса. Например, $ (". DateField"). Datepicker ({...});
Используйте обычный селектор имен классов вместо разных идентификаторов. Использование множественного идентификатора может использовать процессорное время.
$(".YourCommonClassName").datepicker({
//DataPicker parameters..
});
Попробуйте использовать класс и назначьте datepicker соответственно вместо отдельных идентификаторов.
Я использовал четыре класса, потому что у вас есть разные варианты и разные действия в событии onClose
.
Код:
$(".datepicker1").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: 0,
numberOfMonths: 1,
onClose: function (selectedDate) {
var d = new Date(selectedDate);
d.setDate(d.getDate() + 90);
$("#DateTo").datepicker("option", "minDate", selectedDate);
$("#DateTo").datepicker("option", "maxDate", d);
}
});
$(".datepicker2").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: +1,
numberOfMonths: 1,
onClose: function (selectedDate) {
$("#DateFrom").datepicker("option", "maxDate", selectedDate);
}
});
$(".datepicker3").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: 0,
numberOfMonths: 1,
onClose: function (selectedDate) {
var d = new Date(selectedDate);
d.setDate(d.getDate() + 90);
$("#ReturnDate").datepicker("option", "minDate", selectedDate);
$("#ReturnDate").datepicker("option", "maxDate", d);
}
});
$(".datepicker4").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: +1,
numberOfMonths: 1,
onClose: function (selectedDate) {
$("#OutwardDate").datepicker("option", "maxDate", selectedDate);
}
});
Вы можете использовать класс:
<input type="text" class="datepicker" id="date_1" />
<input type="text" class="datepicker" id="date_2" />
<input type="text" class="datepicker" id="date_3" />
$(".datepicker").datepicker({
defaultDate: "+1w",
dateFormat: 'dd-mm-yy',
changeMonth: true,
minDate: +1,
numberOfMonths: 1,
onClose: function (selectedDate) {
$("#OutwardDate").datepicker("option", "maxDate", selectedDate);
}
});