无法使用jquery获取attr id

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

我尝试改变日历的显示方式但是我在使用jquery时有些麻烦:

这是关于我的问题的修改代码的一部分。

带有jquery的twig文件:

 ... 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); }); });  

和html部分 – 用树枝包括:

 
{% for i in 1..6 %} {% endfor %} {% for item in items %} {% for i in 1..42 %} {% endfor %} {% endfor %}
Technicien Lun Mar Mer Jeu Ven Sam Dim
{{ item.name }}

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

$(窗口).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工作 – 感谢您的帮助

HTML部分:

 ... {{ item.name }} 

js部分:

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