我有一个Django模板,列出了我们培训部门的预定课程。对于列表中的每个项目,都有一个名单按钮,单击该按钮可拉出班级的班级名单并将其放入div中。这很好。在此页面上还有一个Javascript日期控件,允许用户选择一个类日期,并查看当天正在举行的类。但是,从Ajax生成类列表时,Roster
按钮单击事件不会触发。
classes.html
<h1>Upcoming Classes</h1>
Class Date: <input type='text' id='datepicker' name='date'/>
<div id='class_listing'>
<ul id='class_list'>
{% if classes %}
{% for c in classes %}
<li>
<div class='class_info'>
<ul class='class_list_item'>
<li>
<h4>
<a href="{% url 'training:class_detail' c.id %}">
{{ c.course.course_name }}
</a>
</h4>
</li>
<li>
<h6>
Start Date: {{ c.get_start_date }}
</h6>
</li>
<li>
<h5>{{ c.location }}</h5>
</li>
<li>
<button class='list_button' value='{{ c.id }}'>Roster</button>
</li>
</ul>
<div class='roster'></div>
<div class='button_menu'><button>Test</button></div>
</div>
</li>
{% endfor %}
</ul>
{% else %}
<p>No classes available</p>
{% endif %}
</div>
这很有效。但是,当我处理所选日期并生成该日期的类列表时,名单按钮不起作用。
我的观点:
def getclasslisting(request):
if request.method == 'GET':
date = request.GET['date']
month, day, year = date.split('/')
formatted_date = year + '-' + month + '-' + day
schedule = Schedule.objects.filter(class_date=formatted_date)
if not schedule:
html = '<h4>No classes scheduled on ' + formatted_date + '</h4>'
else:
html = "<ul id='class_list'>"
for s in schedule:
html += "<li><div class='class_info'><ul class='class_list_item'>"
html += "<li><h4><a href='#'>" + s.scheduled_class.course.course_name + "</a></h4></li>"
html += "<li><h6>Start Date: " + s.scheduled_class.get_start_date() + "</h6></li>"
html += "<li><h5>" + s.scheduled_class.location.name + "</h5></li>"
html += "<li><button class='list_button' value='" + str(s.scheduled_class.id) + "'>Roster</button></li></ul>"
html += "<div class='roster'></div><div class='button_menu'></div></div></li></ul>"
else:
pass
return HttpResponse(html)
最后,javascript:
$( document ).ready(function() {
$('#toggle').click(buildMenu);
$('.list_button').click(getRoster);
$("#datepicker").datepicker({
onSelect: function(dateText) {
var date = $('#datepicker').datepicker({ dateFormat: 'yy-mm-dd' }).val();
$.get('/training/getclasslisting', {date:date}, function(data){
$('#class_listing').empty();
$('#class_listing').append(data);
});
//alert("Selected date: " + dateText + "; input's current value: " + date);
}
});
})
function getRoster() {
var roster = $(this).closest("ul").next();
var id = parseInt(this.value);
$.get('/training/getroster', { id:id}, function(data){
if (roster.is(':empty')) {
roster.append(data);
} else {
roster.empty();
}
alert("Clicked!");
});
}
我认为最初它是HTML页面之间的区别,它有效,而javascript则没有,但是我已经检查了它。此外,我将alert
语句添加到javascript中,以查看函数是否被调用,而不是。有任何想法吗?我已经辞职了,因为我这是一个愚蠢的疏忽。
答案 0 :(得分:3)
尝试:
$('body').on('click', '.list_button', function(){
....
});
然而,这是客户端问题。