Передавать одно значение, а отображать другое

Рейтинг: 0Ответов: 1Опубликовано: 09.10.2014

Здравствуйте. Подскажите, как мне в этом скрипте отображать в таблице только день, а при клике передать дату полностью в формате, например, yyy-mm-dd

function createCalendar(id, year, month) {    
    var elem = document.getElementById(id);

  var mon = month - 1; // месяцы в JS идут от 0 до 11, а не от 1 до 12
  var d = new Date(year, mon);

  var table = '<table class="svet"><tr><th>пн</th><th>вт</th><th>ср</th><th>чт</th><th>пт</th><th>сб</th><th>вс</th></tr><tr>';

  // заполнить первый ряд от понедельника
  // и до дня, с которого начинается месяц
  // * * * | 1  2  3  4
  for (var i=0; i<getDay(d); i++) {
    table += '<td></td>';
  }

  // ячейки календаря с датами
  while(d.getMonth() == mon) {
    table += '<td>'+d.getDate()+'</td>';

    if (getDay(d) % 7 == 6) { // вс, последний день - перевод строки
      table += '</tr><tr>';
    }

    d.setDate(d.getDate()+1);
  }

  // добить таблицу пустыми ячейками, если нужно
  if (getDay(d) != 0) {
    for (var i=getDay(d); i<7; i++) {
      table += '<td></td>';
    }
  }

  // закрыть таблицу
  table += '</tr></table>';

  // только одно присваивание innerHTML
  elem.innerHTML = table;
}

function getDay(date) { // получить номер дня недели, от 0(пн) до 6(вс)
  var day = date.getDay();
  if (day == 0) day = 7;
  return day - 1;
}

//var today = new Date();
//var yr = today.getFullYear();
//var mr = today.getMonth()

createCalendar("calendar", 2014, 10)

$('table').on('click', 'td', function () {
    var index = $(this).index();

    $('td').not(this).filter(function() {
        return $(this).index() == index;
    });

    $(this).toggleClass('click');
var day = $(this).html();
var your_url = 'send.php';
var your_uid = 17;
$.ajax({
        type: "POST",
        url: your_url,
        data: "uid=" + your_uid + "&day="+day,
        success: function(data) {
            if (data) {
                $('td').not(this).filter(function() {
                    return $(this).index() == index;
                });

                $(this).toggleClass('click');
            } else {

            }
        }
    });
    alert($(this).html())
});

Ответы

▲ 1Принят

Добавьте в тело таблицы скрытые поля, примерно так:

var table = "<table>";

table += "<input type =`hidden` id=`month` value=`" + month + "` />";

table += "<input type =`hidden` id=`year` value=`" + year + "` />";

table += "остальные tr, td..

А затем (во время передачи) эти данные можно будет изъять как $('#year').Val();.

Важно понимать, что значения скрытых полей могут динамически изменяться, и процесс получения их нужно будет реализовать через live() или другие конструкции.

К сожалению, с телефона не могу оформить код в теги и одинарные кавычки неправильные… Буду благодарен редактору за поправки ;-)