JQuery: использование document.on внутри if condition [duplicate]

Представления Django должны всегда возвращать объект HttpResponse, поэтому попробуйте обернуть эту строку в HttpResponse:

from django.http import HttpResponse
return HttpResponse(str(resp))

Кроме того, переменная number в generate_xml будет содержать только строку 'number', а не параметр GET. Для этого вы можете использовать:

request.GET.get('id')
66
задан givanse 11 February 2014 в 00:31
поделиться

6 ответов

Общей ошибкой является создание замыканий в циклах в 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);
  });
}

Она короче и понятна.

121
ответ дан Harmen 31 August 2018 в 10:48
поделиться

Чтобы уточнить, i равно 20, потому что событие клика не будет запущено до окончания цикла.

11
ответ дан Donald 31 August 2018 в 10:48
поделиться

Используя в , чтобы присоединить обработчик «щелчок», вы можете использовать данные события, чтобы передавать свои данные, например, в:

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>

3
ответ дан gaetanoM 31 August 2018 в 10:48
поделиться

Вы можете обойтись с назначением обработчика кликов один раз (или, по крайней мере, не делать много ненужных закрытий). Поместите все 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(){
4
ответ дан PleaseStand 31 August 2018 в 10:48
поделиться

Как правило, если вы хотите назначить рукописи кликов большому количеству элементов, вы хотите иметь контейнер (более высокий уровень 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>
2
ответ дан stancoffyn 31 August 2018 в 10:48
поделиться
$(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);
  }
});
6
ответ дан user1490857 31 August 2018 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: