Функция jQuery .attr не возвращается правильно

StackOverflow https://stackoverflow.com/questions/1184860

  •  19-09-2019
  •  | 
  •  

Вопрос

Я создаю список с флажками. После создания списка я использую «.each», чтобы просмотреть их все, и пытаюсь применить процедуру щелчка.

Мой код, подобный этому, работает нормально:

$.ajax({
    url: "./views/todoitems.view.php",
    data: "cmd=list",
    success: function(html){
        $('#list-container').empty().append(html);
        $('input:checkbox').each(function(){
            $check = $(this);
            $check.click(function(){
                alert($(this).attr('itemid'));
            });
        });
    }
});

Однако, как только я изменю оповещение на

alert($check.attr('itemid'));

Он показывает только идентификатор последнего элемента в списке, независимо от того, по какому из них щелкнут.Что я делаю не так?

Это было полезно?

Решение

$check устанавливается внутри каждого обработчика и является глобальной переменной.Это означает, что он сохранит последнее установленное значение, являющееся последним флажком.Вам нужно установить его внутри обработчика кликов, если вы хотите сделать это правильно.Измените его на:

$.ajax({
  url: "./views/todoitems.view.php",
  data: "cmd=list",
  success: function(html) {
    $('#list-container').empty().append(html);
    $('input:checkbox').each(function(){
      $check.click(function() {
        var $check = $(this);
        alert($check.attr('itemid'));
      });
    });
  }
});

Примечание: var используется выше для управления областью действия.

Кроме того, вам не нужно использовать each() для этого.Это эквивалентно:

$.ajax({
  url: "./views/todoitems.view.php",
  data: "cmd=list",
  success: function(html) {
    $('#list-container').empty().append(html);
    $('input:checkbox').click(function() {
      alert($(this).attr('itemid'));
    });
  }
});

Другие советы

Чтобы добавить к ответу Клетуса (я пока не могу комментировать): $check становится подразумеваемой глобальной переменной, поскольку в ее объявлении отсутствует var.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top