Установка динамических данных для динамических элементов JQuery - PullRequest
2 голосов
/ 09 июля 2010

Я новичок в JQuery и тоже не имею большого опыта в Javascript - так что это может способствовать моим проблемам ... Я пытаюсь динамически генерировать список элементов и привязывать события клика к каждомуиз динамически генерируемых элементов.Я могу создать список и успешно связать события щелчка, но затем я наткнулся на камень преткновения.

Мне нужно, чтобы каждое событие щелчка могло обращаться к определенным данным, связанным с элементом, по которому щелкнули.Сначала я просто включил данные в динамическую функцию, которую я создаю при привязке события click.Приведенный ниже код пытается это сделать, но всякий раз, когда я щелкаю элемент в списке, я получаю только окончательное значение моей переменной счетчика (2).

Очевидно, что я неправильно понимаюспособ, которым моя функция щелчка создана.Я прочитал целую кучу статей здесь, на SO, которые могут быть связаны, но я пока не нашел элегантного / правильного способа сделать это.

Моя тестовая страница:

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>

    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">google.load("jquery", "1.3.2");</script>

    <script type="text/javascript">
function generateList() {
  var listElement = $('#unsortedList');
  var dataArr = new Array();
  dataArr["name1"] = "value1";
  dataArr["name2"] = "value2";

  // Clear any existing HTML
  listElement.html('');

  var i = 0;
  for(item in dataArr) {
    listElement.append('<li><div id="item' + i + '">Item ' + i + '</div></li>');

    $('#item' + i).click(function() {
      alert(i);
      $('#item' + i).html("You clicked item " + i);
    });

    i++;
  }
}

$(document).ready(function(e){
  generateList();
});

    </script>
  </head>
  <body>
    <h1>Test List</h1>
    <ul id="unsortedList">
    </ul>
  </body>
</html>

[EDIT] - Моя конечная цель - использовать значение переменной счетчика для индексации во внешний массив значений.Я знаю, что в примере это выглядит немного несвязным.Когда вы щелкаете элемент, я хочу извлечь индекс в массив, запустить функцию, которая сгенерирует значение, которое я буду использовать для заполнения другого элемента в том же элементе динамического списка.

Ответы [ 2 ]

5 голосов
/ 09 июля 2010

Это работает:

 $('#item' + i).click((function(x) {
          return function(){
              $('#item' + x).html("You clicked item " + x);
          };
        })(i));

проверено здесь: http://jsfiddle.net/uLGxb/

0 голосов
/ 10 июля 2010

NM - хорошее простое решение. конечно, внутренний раздел может быть в равной степени записан как:

      return function(){
          $(this).html("You clicked item " + x);
      };
...