2010-10-28 1 views
0

Я работаю над модулем взаимодействия с календарем. в календаре указаны зарезервированные дни. интервал резервирования составляет 7 дней. я установил через javascript, который в течение дня добавляет класс и автоматически зависает за 3 дня до и через 3 дня после этого дня, чтобы визуализировать настройку 7-дневного интервала для этого класса. теперь я столкнулся со следующей проблемой.Нужна помощь в обнаружении столкновения с помощью jQuery

если я нахожу день и один из пред. 3 или следующий 3 уже является частью резервирования, я хочу добавить разницу на другой конец 7-дневного интервала. пример:

  1. я парить день 12
  2. то интервал выглядит xxx12xxx
  3. я переместить курсор на 13
  4. интервал выглядит xxx13xxx
  5. если я теперь переместить курсор на 14 то также будет отмечено 15,16,17, но что, если 16 является отправной точкой резервирования? то это будет выглядеть как xxx14x
  6. В любом случае мне, наконец, нужно знать идентификатор левого и правого наружного конца, так как это значения, которые я должен отправить через форму. как их получить?
  7. Как сделать так, чтобы разница (16 и 17) начиналась с левого конца, чтобы она выглядела как xxxxx14x?

Единственный способ, я вижу, что он имеет переключатель из 7 корпусов с огромным кодовым блоком. но почему-то я чувствую, что есть более простой способ.

Можете ли вы, ребята, вероятно, показать мне?

большое спасибо заранее за чтение!

рассматривает

ответ

0

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

on day hover{ 
    determine the base starting date. 
    start day = current day.value - 3 
    end day = start day + 7 

    There's several scenerios to deal with: 
     all seven days are available. 
     some days between the start day and the current day are reserved, but enough are availabel after the end day to allow for choosing 7 days 
     some days between the current day and the end day are reserved, but enough are available before the start day to allow for selecting 7 days 
     There some days are reserved between both the start day and current day as well as the curent day and end day (in which case, no selection can be made). 

    So, you need to determine which case you're dealing with and adjust the 7 day span accordingly. 

    set a boolean to handle checking logic. 
    hasSevenDayAvailablility = true 

    test the first instance. 
    iterate over each day and see if any are currently reserved. 
    for(start day to end day as day){ 
     if(day is reserved){ 
      hasSevenDayAvailability = false 
     } 
    } 

    At this point, you know whether or not you even need to modify the seven day window. 
    if(!hasSevenDayAvailability){ 
     Check for no availability first (as this is the easiest to check) Since the only reservation options are in blocks of 7, we only have to check the start day and end day. 
     if(start day is reserved && end day is reserved){ 
      a reservation window is unavailable, so do nothing. 
     } else { 
      if(the start day is reserved){ 
       increment the start day until you reach the current day and test for 7 day availability window 
       for(start day to current day as day){ 
        if(day is available && day + 7 is available){ 
         start day = day 
         end day = start day + 7 
         hasSevenDayAvailability = true 
         break 
        } 
       } 
      } else { 
       decrement the end day until you reach the current day and test for 7 day availability window 
       for(end day to current day step -1 as day){ 
        if(day is available && day - 7 is available){ 
         start day = day - 7 
         end day = day 
         hasSevenDayAvailability = true 
         break 
        } 
       } 
      } 
     } 
    } 

    Finally, if there is a seven day availability window, use the calculated start and end days to set classes as needed. 
    if(hasSevenDayAvailability){ 
     for(start day to end day as day){ 
      day.addClass(highlighted) 
     } 
    } 
} 
+0

0 Вы должны отформатировать сообщение, так что только фактический код имеет четыре пробела перед ним. – treeface

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