27.10.2011, 09:32
|
Интересующийся
|
|
Регистрация: 27.10.2011
Сообщений: 10
|
|
Помогите доработать скрипт
Здравствуйте.
Помогите пожалуйста доработать скрипт на сайте http://studyrussianinrussia.com/constructor на втором шаге (выбор даты записи).
Сейчас скрипт позволяет выбрать только любые понедельники любого месяца. А нужно, что бы можно было выбирать любой массив дат, который будет задаваться заранее, к примеру, 20 ноября 2011 г, 18 декабря 2011 г.
Вот сам код:
jQuery('#datepicker').datepicker({
changeMonth: true,
changeYear: true,
minDate: 0,
dateFormat: 'mm-dd-yy',
altField: '#constructor_depdate',
altFormat: 'dd-MM-yy',
showOtherMonths: true,
yearRange: '2010:2015',
onSelect: function() {
jQuery('#page_2 button.btn_next').removeAttr('disabled');
setTimeout('disableDays()', 1);
},
onChangeMonthYear: function() {
setTimeout('disableDays()', 1);
}
});
});
//disable unselectable days
function disableDays(){
exclude = '2';
jQuery('table.ui-datepicker-calendar tr').each(function(){
jQuery(this).find('td:not(:eq('+exclude+'))').
addClass('ui-datepicker-unselectable ui-state-disabled').
attr('onclick','return false;').find('a').
each(function(){
d = jQuery(this).text();
jQuery(this).replaceWith('<span class="ui-state-default">'+d+'</span>');
});
});
}
|
|
28.10.2011, 13:22
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 28.10.2011 в 13:32.
|
|
28.10.2011, 14:51
|
Интересующийся
|
|
Регистрация: 27.10.2011
Сообщений: 10
|
|
К td не получится фильтр применить, т.к. в таблице содержатся даты предыдущих месяцев, следовательно, нумерация td от начала таблицы сбита.
Поэтому даже ни каких соображений у меня нет((
|
|
28.10.2011, 14:58
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
jenya, ты бы напрягся хоть чуть-чуть... Да примерчик тестовый тут смастерил...
Или деньги начинай копить для оплаты решения твоей проблемы...
Последний раз редактировалось ksa, 31.10.2011 в 11:54.
|
|
28.10.2011, 15:09
|
Интересующийся
|
|
Регистрация: 27.10.2011
Сообщений: 10
|
|
Не понял о чем ты...
Меня интересует обычный календарь, в котором нужно сделать активной только одну определенную дату.
Но так как в календаре отображаются числа не только активного месяца но и предыдущего и последующего, то нумерация ячеек в таблице сбита, то есть номер ячейки и число месяца расходятся, следовательно, у меня возникла сложность с написанием фильтра.
Мне нужна просто идея, а не реализация.
Спасибо
|
|
28.10.2011, 15:19
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от jenya
|
у меня возникла сложность с написанием фильтра.
Мне нужна просто идея, а не реализация.
|
Идея любой фильтрации проста - нужно фильтровать "фильтруемое".
Например такое представление даты ДД.ММ.ГГГ особо не пофильтруешь по периоду...
А вот если представить дату как число (прошедших дней с какого-либо дня) - то число прекрасно "фильтруется в интервале" других двух чисел...
|
|
28.10.2011, 15:24
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Я же подсказал уже
у тебя уже есть jQuery(this).find('td:not(:eq('+exclude+'))').
Замени на
// фильтр будет переберать всё что нашла операци find(td)
jQuery(this).find('td').filter(function(index){
if ($(this.html()==13) return false // в ячейки есть число 13, исключаем эту ячейку
else return true; // там какое то другое число, оставляем ячейку
// Тоесть если вернёш false элемент исключится, true останется
// данный пример исключит все клетки с числом 13
})
.append("hello");// делаем чтонибудь с неисключёнными ячейками
В примере выше мы работает со значением 13, у тебя не одно значение а целый массив
Относительно поиска значения в массиве почитай это
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 28.10.2011 в 15:37.
|
|
31.10.2011, 11:21
|
Интересующийся
|
|
Регистрация: 27.10.2011
Сообщений: 10
|
|
Такая комбинация не работает:
jQuery('table.ui-datepicker-calendar tr').each(function(){
jQuery(this).find('td').filter(function(index){
if ($(this.html()==13) return false
else return true;
})
.append("hello");
});
|
|
31.10.2011, 11:27
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
if (
$(this.html()==13)
- скобку бы сюда ещё
return false
else return true;
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
|
|
31.10.2011, 13:50
|
Интересующийся
|
|
Регистрация: 27.10.2011
Сообщений: 10
|
|
Че то не работает все равно фильтр.
Делаю, как ты сказал:
jQuery('table.ui-datepicker-calendar tr').each(function(){
jQuery(this).find('td').filter(function(index){
if ($(this.html())==13) return false
else return true;
})
.
addClass('ui-datepicker-unselectable ui-state-disabled').
attr('onclick','return false;').find('a').
each(function(){
d = jQuery(this).text();
jQuery(this).replaceWith('<span class="ui-state-default">'+d+'</span>');
});
});
Мне кажется ошибка в $(this.html())
Я еще вот этот фильтр нашел
jQuery(this).find('td:not(:contains(13))').
Может проще его использовать? Вот только если делать contains(2), то будет закрыта не только вторая ячейка, но и те, у которых в id есть цифра 2. Можно ли как то сделать строгое соответствие, через какие-нибудь спец символы?
|
|
|
|