Календарь Jquery - .attr ('id') получает неправильное значение - PullRequest
1 голос
/ 13 июля 2011

Я хочу установить дату в заголовке расписания, поместив div id из функции создания календаря в текст заголовка.

Я получаю id вот так $('.dayNumberCellValue').attr('id');, но у меня проблема в том, что когда вы нажимаете на день в календаре, я получаю одинаковую дату для всех дней, "27" (это startDate моего календаря). Мне кажется, что в $('.dayNumberCellValue').attr('id'); идет та же дата, но почему, и как календарь работает нормально, если он должен показывать только дату «27» во всех ячейках?

Функция нажатия - >>

        $('.div-cell').tap(function() {
                            var i;
                            var myDate2;
                              for (i = 0; i < 42; i++) {
                                $('#' + i + 'dayCell').removeClass('tapped');

                                      }

                              $(this).toggleClass(
                                   'tapped');

                              if($(this).hasClass('tapped')){


                                    myDate2 = $('.dayNumberCellValue').attr('id');
                                    $('#MSchedule header h4').text("S - "+myDate2);}

                    });

Создание календаря ->

function setCalendar() {

    var cTime = new Date();
    var myDate = months[cTime.getMonth()] + " " + cTime.getFullYear();
    var myDate2 = cTime.getDate() + " " + months[cTime.getMonth()];


    $('#MCalendar header h4').text(myDate);
     $('#MSchedule header h4').text("Schedule  -  " + myDate2)

    var monthView = new Array(42);

    var firstDayOfMonth = new Date(cTime.getFullYear(), cTime.getMonth(), 1);

    while (firstDayOfMonth.getDay() != 1) {

        firstDayOfMonth.addDays(-1);

    }

    var i;

    for (i = 0; i < monthView.length; i++) {


        startDate = new Date(firstDayOfMonth);

        monthView[i] = startDate.addDays(i);

        }


for(var day=0;day<monthView.length;day++){

var needDay=monthView[day].getDate();

var cell = $('#'+day+'dayCell');
var content = '<div class="dayNumberCellValue" id=' +needDay+ '>'
    + monthView[day].getDate()
            + '</div>';
        cell.append(content);}

1 Ответ

3 голосов
/ 13 июля 2011

Эта строка:

myDate2 = $('.dayNumberCellValue').attr('id');

всегда будет получать значение id первого соответствующего элемента (первого элемента с классом "dayNumberCellValue" в документе, начиная снаверх).

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

myDate2 = $(this).find('.dayNumberCellValue').attr('id');

Это ищет первый элемент "dayNumberCellValue" внутри элемента this, который при нажатии будет элементом, который вы наблюдаете за событием tap.


Не по теме : Вы сказали, что всегда получаете «27», что предполагает использование «27» в качестве id элемента.Хотя это недавно было разрешено (по HTML5), оно было недопустимым в HTML 4 и более ранних и остается недопустимым в CSS .Я бы порекомендовал не использовать идентификатор, начинающийся с цифры.На самом деле, я думаю, что я бы, вероятно, использовал атрибут data-* для хранения даты, а не id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...