【问题标题】:Jquery Calendar - .attr('id') get wrong valueJquery Calendar - .attr('id') 得到错误的值
【发布时间】:2011-07-13 19:51:40
【问题描述】:

我想通过将日历创建功能中的div id 放到标题文本中来在日程表标题中设置日期。

我得到了id 这样的$('.dayNumberCellValue').attr('id');,但是我有一个问题,当您点击日历中的日期时,我得到的所有日期都是相同的日期,“27”(这是我日历的开始日期)。在我看来,$('.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);}

【问题讨论】:

    标签: javascript jquery jquery-mobile


    【解决方案1】:

    这一行:

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

    将始终获得第一个匹配元素的id值(文档中第一个具有“dayNumberCellValue”类的元素,从顶部开始)。

    你还没有显示你的标记,但是如果你想要的元素在被点击的元素内,那么在你的 tap 处理程序中你可以像这样找到它:

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

    这会查找this 元素的第一个“dayNumberCellValue”元素,点击该元素将是您正在观看tap 事件的元素。


    题外话:你说你总是得到“27”,这表明你使用“27”作为元素的id。虽然那是 recently been allowed(通过 HTML5),但它是 invalid in HTML 4 and earlier,并且仍然是 invalid in CSS。我建议不要使用以数字开头的 ID。事实上,我想我可能会使用 data-* attribute 而不是 id 来存储日期。

    【讨论】:

    • $('.dayNumberCellValue') 选择器可能会返回一个列表。你可以遍历元素并做你的事情
    • 谢谢,你的回答真的救了我:)我开始使用“data-*”,也谢谢你:)
    • @Sergio:很高兴有帮助!最好的,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多