在动态JQuery元素上设置动态数据

时间:2010-07-09 19:44:16

标签: javascript jquery dynamic dhtml

我是JQuery的新手,也没有Javascript的大背景 - 所以这可能导致我的问题......我正在尝试动态生成项目列表并将点击事件绑定到每个动态生成的元素。我可以创建列表并成功绑定点击事件,但后来遇到了绊脚石。

我需要能够让每个点击事件访问与被点击的项目相关联的特定数据。我最初的做法是将数据包含在我绑定click事件时创建的动态函数中。下面的代码试图这样做,但每当我点击列表中的一个元素时,我只得到我的计数器变量(2)的 final 值。

显然,我误解了我的点击功能的创建方式。我在这里阅读了很多项目可能相关,但我还没有找到优雅/正确的方法来实现这一目标。

我的测试页:

<!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>

[编辑] - 我的最终目标是使用计数器变量值来索引外部数组值。我知道这个例子似乎有点断开了。单击该项时,我想将索引拉出到数组中,运行一个函数,该函数将生成一个值,用于填充同一动态列表项中的另一个元素。

2 个答案:

答案 0 :(得分:5)

这有效:

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

在此测试:http://jsfiddle.net/uLGxb/

答案 1 :(得分:0)

NM - 很好的简单解决方案。当然,内部部分同样可以写成:

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