2013-02-27 3 views
4

У меня есть два разных экземпляра jquery date-picker из jquery1.8.1.min.js в моем приложении RoR.Сумасшедшее поведение в jquery date-picker

У меня есть эта функция:

$(".date-picker:not('#policy_starts_on')").datepicker(); 
    $('#policy_starts_on.date-picker').datepicker({ 
     startDate: '0', 
     endDate: '+90d' 
    }); 

, который идет с этим входом:

<input class="required date-picker input-small align-center" id="policy_starts_on" name="policy[starts_on]" size="30" type="text" value="02/27/2013"> 

Тогда у меня есть эта функция:

$(".date-picker:not('#act_event_ends_on')").datepicker(); 
    $('#act_event_ends_on.date-picker').datepicker({ 
     startDate: '0', 
     endDate: '+180d' 
    }); 

, который идет с этим входом:

<input class="required date-picker input-small align-center" id="act_event_ends_on" name="act_event[ends_on]" size="30" type="text"> 

Оба входа порожден рубина формы помощникам:

Это является первой формой помощник:

= f.input :starts_on, :label => 'Policy Start Date', :required => true 

И это вторая форма помощника:

= f.input :ends_on, :label => 'Event End Date', :required => true 

Вопрос: Почему первый вход ограничен правильно (IE вы не можете выбрать день в прошлом, и это позволит вам пройти 90 дней в будущем), в то время как второй вход не ограничивается вообще?


+0

почему вы звоните '.datepicker()' дважды для них обоих? –

+0

Другая проблема с копированием и вставкой. –

ответ

2

Эта линия:

$(".date-picker:not('#policy_starts_on')").datepicker(); 

инициализирует второй вход (один с идентификатором = «act_event_ends_on»), потому что он имеет date-picker класса и не имеет идентификатора policy_starts_on.

В результате, этот элемент уже инициализирован и следующий код не будет ничего делать для вас больше:

$('#act_event_ends_on.date-picker').datepicker({ 
    startDate: '0', 
    endDate: '+180d' 
}); 

РЕШЕНИЕ:

Моя рекомендация будет давать исключений, специальный класс имена (т.е."Дата-подборщика-специальное"):

<input class="required date-picker date-picker-special input-small align-center" id="policy_starts_on" name="policy[starts_on]" size="30" type="text" value="02/27/2013"> 

<input class="required date-picker date-picker-special input-small align-center" id="act_event_ends_on" name="act_event[ends_on]" size="30" type="text"> 

Затем вы можете сделать следующее:

$(".date-picker:not('.date-picker-special')").datepicker(); 
$('#policy_starts_on.date-picker').datepicker({ 
    startDate: '0', 
    endDate: '+90d' 
}); 
$('#act_event_ends_on.date-picker').datepicker({ 
    startDate: '0', 
    endDate: '+180d' 
}); 
+0

Добавлен специальный класс, и он отлично поработал, спасибо за это. Да, я не писал оригинал, просто унаследовал его, не объяснив, что делает строка '$ (". Date-picker: not ('')) ''. Но то, что вы сказали, имеет смысл. И теперь я знаю, что он делает для будущего. Еще раз спасибо. – Ryan

+0

Рад, что я мог помочь. :) – Steve

1

только ради эксперимента, происходит ли противоположное поведение, если вы заявляете те установки датпикера в обратном порядке? если противоположный разрывается, то вы можете сделать вывод, что у datepicker есть ошибка (что маловероятно). в противном случае вам нужно будет посмотреть на свой собственный код.

также, обратите внимание, что вы предшествуют каждый блок с чем-то вроде этого:

$(".date-picker:not('#policy_starts_on')").datepicker(); 

, который говорит, чтобы выбрать все сборщиков даты, за исключением того одного конкретного одного.

, так что в следующий раз, когда вы установите один, его уже говорили. попробуйте удалить эти остротами, и вы остались с:

$('#policy_starts_on.date-picker').datepicker({ 
    startDate: '0', 
    endDate: '+90d' 
}); 

$('#act_event_ends_on.date-picker').datepicker({ 
    startDate: '0', 
    endDate: '+180d' 
}); 
+0

+1 для той же информации, но другой парень предложил решение, которое заработало. Спасибо, что нашли время посмотреть. – Ryan

Смежные вопросы