Представления Django должны всегда возвращать объект HttpResponse
, поэтому попробуйте обернуть эту строку в HttpResponse:
from django.http import HttpResponse
return HttpResponse(str(resp))
Кроме того, переменная number
в generate_xml
будет содержать только строку 'number'
, а не параметр GET. Для этого вы можете использовать:
request.GET.get('id')
Общей ошибкой является создание замыканий в циклах в Javascript. У вас должна быть какая-то функция обратного вызова:
function createCallback( i ){
return function(){
alert('you clicked' + i);
}
}
$(document).ready(function(){
for(var i = 0; i < 20; i++) {
$('#question' + i).click( createCallback( i ) );
}
});
Обновление 3 июня 2016 года: , так как этот вопрос все еще получает некоторую тягу и ES6 получает Кроме того, я бы предложил современное решение. Если вы пишете ES6, вы можете использовать ключевое слово let
, которое делает переменную i
локальной в цикле вместо глобальной:
for(let i = 0; i < 20; i++) {
$('#question' + i).click( function(){
alert('you clicked ' + i);
});
}
Она короче и понятна.
Чтобы уточнить, i равно 20, потому что событие клика не будет запущено до окончания цикла.
Используя в , чтобы присоединить обработчик «щелчок», вы можете использовать данные события, чтобы передавать свои данные, например, в:
for(var i = 0; i < 20; i++) {
$('#question' + i).on('click', {'idx': i}, function(e) {
alert('you clicked ' + e.data.idx);
});
}
//
// let's creat 20 buttons
//
for(var j = 0; j < 20; j++) {
$('body').append($('<button/>', {type: 'button', id: 'question' + j, text: 'Click Me ' + j}))
}
//
// Passing data to the handler
//
for(var i = 0; i < 20; i++) {
$('#question' + i).on('click', {'idx': i}, function(e) {
console.log('you clicked ' + e.data.idx);
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Вы можете обойтись с назначением обработчика кликов один раз (или, по крайней мере, не делать много ненужных закрытий). Поместите все div в один класс mydivs
, затем:
$(document).ready(function(){
$('.mydivs').click(function(){
// Get the number starting from the ID's 6th character
// This assumes that the common prefix is "mydiv"
var i = Number(this.id.slice(5));
alert('you clicked ' + i);
});
});
. Посмотрите на идентификатор элемента, чтобы получить его номер, используя метод slice
string , чтобы удалить начальные буквы выключены.
Примечание. Лучше использовать
$('#divcontainer').on('click', '.mydivs', function(){
вместо
$('.mydivs').click(function(){
Как правило, если вы хотите назначить рукописи кликов большому количеству элементов, вы хотите иметь контейнер (более высокий уровень div), который интерпретирует клики для вас, так как клик пузырится от dom.
<div id="bucket">
<span class="decorator-class" value="3">
...
</div>
<script>
$(document).ready(function(e){
$("#bucket").live('click', function(){
if(e.target).is('span'){
alert("elementid: " + $(e.target).val());
}
}
}
<script>
$(document).ready(function(){
for(var i = 0; i < 5; i++) {
var $li= $('<li>' + i +'</li>');
(function(i) {
$li.click( function(){
alert('you clicked ' + i);
});
}(i));
$('#ul').append($li);
}
});