Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Календарь (специальные даты)
 
 автор: Лапатулька   (05.10.2008 в 11:06)   письмо автору
 
 

Приветик, всем))
Подскажите, пожалуйста, вот есть календарик. И там надо отметить специальные даты только в определенном году, а он(JS) во всех годах это делает((, уже голову поломала как придумать, чтобы выделялся год 2008 только. Помогите
<script type="text/javascript">
  var SPECIAL_DAYS = {
    0 : [ 13, 24 ],        // special days in January
    2 : [ 1, 6, 8, 12, 18 ],    // special days in March
    8 : [ 21, 11 ]        // special days in September
  };

  function dateIsSpecial(year, month, day) {
    var m = SPECIAL_DAYS[month];
    if (!m) return false;
    for (var i in m) if (m[i] == day) return true;
    return false;
  };

  Ответить  
 
 автор: sim5   (05.10.2008 в 11:57)   письмо автору
 
   для: Лапатулька   (05.10.2008 в 11:06)
 

<script type="text/javascript">
var SPECIAL_DAYS = new Array();  
SPECIAL_DAYS[0] = new Array(13, 24); // special days in January 
SPECIAL_DAYS[2] = new Array(1, 6, 8, 12, 18); // special days in March 
SPECIAL_DAYS[8] = new Array(21, 11);  // special days in September 

function dateIsSpecial(month, day) {
  //если надо узнать есть ли такая дата в массиве,
  //то получаем по номеру месяца соответствующие даты
  function dateIsSpecial(month, day) {
    if (SPECIAL_DAYS[month]) { 
      //если есть такой месяц,
      //берем массив как строку
      var s = SPECIAL_DAYS[month].toString();
      //есть ли текущее число в строке
      if (s.indexOf(day) > -1) alert("YES"); else alert("NO");
    } else alert("No special"); //такого месяца нет 
  }
}
</script>

<input type="button" value="GET DAY" onclick="dateIsSpecial(8, 21)">

PS. Другими словами, можно держать специальные даты как строки в массиве, затем получать по индексу равному номеру месяца строку и искать в ней искомую дату, а преобразование массива в строку удалить из функции.

  Ответить  
 
 автор: Лапатулька   (05.10.2008 в 12:15)   письмо автору
 
   для: sim5   (05.10.2008 в 11:57)
 

...извените, но я что-то не смогла, то что Вы написали внедрить в
<script type="text/javascript">
  var SPECIAL_DAYS = {
    0 : [ 13, 24 ],        // special days in January
    2 : [ 1, 6, 8, 12, 18 ],    // special days in March
    8 : [ 21, 11 ]        // special days in September
  };

  function dateIsSpecial(year, month, day) {
    var m = SPECIAL_DAYS[month];
    if (!m) return false;
    for (var i in m) if (m[i] == day) return true;
    return false;
  };

  function dateChanged(calendar) {
    // Beware that this function is called even if the end-user only
    // changed the month/year.  In order to determine if a date was
    // clicked you can use the dateClicked property of the calendar:
    if (calendar.dateClicked) {
      // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
      var y = calendar.date.getFullYear();
      var m = calendar.date.getMonth();     // integer, 0..11
      var d = calendar.date.getDate();      // integer, 1..31
      // redirect...
    if (dateIsSpecial(y, m, d))
      window.location = "?y=" + y + "&m=" + m + "&d=" + d + "";

    }
  };

  function ourDateStatusFunc(date, y, m, d) {
    if (dateIsSpecial(y, m, d))
      return "special";
    else
      return false; // other dates are enabled
      // return true if you want to disable other dates
  };

  Calendar.setup(
    {
      flat         : "calendar-container", // ID of the parent element
      flatCallback : dateChanged,          // our callback function
      dateStatusFunc : ourDateStatusFunc
    }
  );
</script>
...так чтобы это работало..(((, если Вас не затруднит, то помогите, пожалуйста...

  Ответить  
 
 автор: sim5   (05.10.2008 в 12:38)   письмо автору
 
   для: Лапатулька   (05.10.2008 в 12:15)
 


//задайте массив специальных дат как строки в массиве
//индесками которого, служат номера месяцев
var SPECIAL_DAYS = new Array(); 
SPECIAL_DAYS[0] = "13 24"; // special days in January 
SPECIAL_DAYS[2] = "1 6 8 12 18"; // special days in March 
SPECIAL_DAYS[8] = "21 11";  // special days in September 

//эта функция выдает, есть ли в массиве специальная дата в текущем месяце
function dateIsSpecial(month, day) { 
  if (SPECIAL_DAYS[month]) { 
    if (SPECIAL_DAYS[month].indexOf(day) > -1) return true; else return false;
  } else return false;
}

Что касается вашего дальнейшего кода, то чтобы работать с датой, нужно создать объект Date, а уже потом работать с ним (это в функции dateChanged(calendar)). То есть нужно сперва так:
var calendar = new Date();
а уже потом
var m = calendar.getMonth();
Но у вас используется и calendar и зарезервированное слово date, что есть не хорошо.
Зачем передается год в функции тоже не понятно, так как сам массив не содержит и намека на год. В общем, лучше объясните "на пальцах", чего вы хотите, а то дальнейший участок кода не понятен, кроме как самих вызовов.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования