【问题标题】:Setting dynamic data on dynamic JQuery elements在动态 JQuery 元素上设置动态数据
【发布时间】:2011-03-14 01:27:18
【问题描述】:

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

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

显然我误解了我的点击功能的创建方式。我已经在 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>

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

【问题讨论】:

    标签: javascript jquery dynamic dhtml


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这行得通:

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

      在这里测试过:http://jsfiddle.net/uLGxb/

      【讨论】:

      • 你需要的是关闭这里。让我知道这是否有效,因为我没有机会对此进行测试。
      • 我在这里看到了这个想法,但我试过了,它似乎没有改变任何东西。两个元素仍然接收 '2' 作为 x 的值。
      • 我认为,在这种情况下,“x”将是一个事件对象(取决于浏览器)。如果你要从“return function(x)”行中去掉“x”参数,我认为这将是完美的。
      • 这行得通!作为额外的奖励,我什至认为我理解为什么。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2019-09-09
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多