【问题标题】:Can't get attr id with jquery无法使用 jquery 获取 attr id
【发布时间】:2013-11-02 01:17:19
【问题描述】:

我正在使用 http://www.symfocal.com/ 的 symfony 应用程序 (2.3)

我尝试更改日历的显示方式,但 jquery 遇到了一些问题:

这是修改后的代码中与我的问题有关的部分。

带有 jquery 的树枝文件:

<script>
...
jQuery(document).ready(function() {

var cal1 = $('#cal1');
var cal2 = $('#cal2');

function fillCalendar(mois, annee, cal)
{
    $(cal).css('display', 'none');
    $(cal).find('a').removeClass().unbind();
    {% if admin == false %}
    $(cal).find('a').click(function(e){e.preventDefault();});
    {% endif %}

    ...
    var id = $(cal).attr('id');

    $.post(url,{
        month: mois,
        year: annee,
       },function(data){
            if(data.responseCode==200 )
            {
                var days_previous_month=data.days_previous_month;
                var nb_days_prev=data.nb_days_prev;
                $('#'+id+'_title').html(data.current_month);
                var count=1;
                while(count<43)
                {
                    {% if admin %}
                    if(data.calendar[(count-1)].dates!="")
                    {
                        $('#'+id+'_cell_'+count).attr("title", data.calendar[(count-1)].dates).click(changeState);
                    }
                    else
                    {
                        $('#'+id+'_cell_'+count).click(function(e){e.preventDefault();});
                    }
                    {% endif %}
                    if(data.calendar[(count-1)].booked==-1) $('#'+id+'_cell_'+count).html(days_previous_month - nb_days_prev + count);
                    else $('#'+id+'_cell_'+count).html(data.calendar[(count-1)].fill);
                    if(data.calendar[(count-1)].booked==1) $('#'+id+'_cell_'+count).addClass(data.calendar[(count-1)].classe);
                    else if(data.calendar[(count-1)].booked<0) $('#'+id+'_cell_'+count).addClass("dates_preview");
                    count++;
                }
                $(cal).css('display', 'block');
            }
            else
...
function changeMonths(step)
{
    gap = gap + step;

    var newMonth = month + (1 * gap)%12;
    var gapYear = (1 * gap)/12;
    var newYear = year + gapYear - gapYear%1;
    if (newMonth<=0)
    {
        newMonth+=12;
    }

    {% for item in items %}
        fillCalendar(newMonth-12*Math.floor((newMonth)/13), newYear+Math.floor((newMonth)/13), 'cal{{ item.id }}' );
    {% endfor %}
}
...
$(window).load(function(){
    changeMonths(0);
});


});    
</script> 

和 html 部分 - 用树枝包括:

<div class="calendar_wrapper">
    <div id="cal1" class="calendar">
        <table class="tab_calendar" align="center">
            <tr>
                <td class="title_calendar" colspan="43" width="100%">
                    <span id="cal1_title"></span>
                </td>
            </tr>
            <tr>
                <td  class="tech" >
                <span>Technicien</span>
                </td>
                {% for i in 1..6 %}
                    <td  class="cell_jour" >
                    <span>Lun</span>
                    </td>
                    <td  class="cell_jour" >
                    <span>Mar</span>
                    </td>
                    <td  class="cell_jour" >
                    <span>Mer</span>
                    </td>
                    <td  class="cell_jour" >
                    <span>Jeu</span>
                    </td>
                    <td  class="cell_jour" >
                    <span>Ven</span>
                    </td>
                    <td  class="cell_jour" >
                    <span>Sam</span>
                    </td>
                    <td  class="cell_jour" >
                    <span>Dim</span>
                    </td>
                {% endfor %}
            </tr>
            {% for item in items %}
                <tr>
                    <td class="{{ item.id }}">{{ item.name }}</td>
                    {% for i in 1..42 %}
                        <td class="cell_calendar"><a id="cal{{ item.id }}_cell_{{ i }}" href="#"></a></td>
                    {% endfor %}
                </tr>
            {% endfor %}
            </table>
    </div>
</div>

我对正在发生的事情的理解:

$(window).load(函数收费changeMonths(0)

changeMonths 为每个项目调用函数fillCalendar(此时测试有两个项目(id 1 和id 2)

这是我有一个错误:

指令:

var id = $(cal).attr('id');

没有得到 id - 它的未定义

但是作为参数接收的变量 cal 是 cal1 然后是 cal2 并且应该返回 id,意思是 cal1 或 cal2。

有人可以帮我解决这个问题吗?

编辑: 我按照 ihsan 的回答 - 现在好多了,但只有第一行日历填满了月份

console.log(cal); shows now :

#cal1 
#cal2 

编辑 2: 好的,我必须修改我的 html 以使 cal2 也可以工作 - 感谢您的帮助

【问题讨论】:

  • 在fillCalendar的开头添加console.log(cal)并告诉我们出现了什么

标签: php jquery symfony


【解决方案1】:

html部分:

...
<td id="cal{{ item.id }}">{{ item.name }}</td>

js部分:

...
fillCalendar(newMonth-12*Math.floor((newMonth)/13), newYear+Math.floor((newMonth)/13), '#cal{{ item.id }}' );

【讨论】:

  • 我按照你说的做了,第一行 (cal1) 填满了月份的日期,而不是第二行 (cal2) !?!
猜你喜欢
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 2014-10-21
  • 2015-03-13
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 2015-06-06
相关资源
最近更新 更多