javascript - 动态元素正在占用上次单击元素的数据

标签 javascript jquery html css

我正在尝试将 ajax 获取的数据添加到使用 jquery 动态添加到 DOM 的元素中。这些元素具有相同的类但不同的 ID。它们是通过“点击”事件添加的。一切正常。问题是所有附加元素都显示由最后单击元素的 ID 获取的数据。 我不确定如何在 jsfiddle 中演示这一点,但这是我在说什么的一个想法 HTML:

<li class="options" id="1">Item 1</li>
<li class="options" id="2">Item 2</li>
<li class="options" id="3">Item 3</li>
<br/>
<div class="boxes"></div>

JS:

//how to add the box to the DOM
$('li.options').click(function() {
  id = $(this).attr('id');
  $('.boxes').append('<div class="box" id="'+id+'"><div class="box-content"></div></div>');
  //Fetching data via ajax
  $.ajax({
    type: 'POST',
    url: '/echo/json/',
    dataType: 'json',
    cache: false,
    data: {
      'id': id
    },
    success: function(res) {
      $(this).find('box-content').append(res);
    }
  });
});

这是jsfiddle中的例子

https://jsfiddle.net/pkgf7enj/11/

假设接收到的数据等于ID。即,如果单击元素 1,则返回的数据(通过 ajax)为 1,如果单击元素 2,则返回 2,等等。

现在,如果我单击元素 1,则会附加带有“1”的框。如果我单击元素 2,则会附加框 2,但框 1 和框 2 的值都是 2(最后单击的元素)。如果我然后单击 3,则 3 个框将有 3.

我该如何解决这个问题?有人请

最佳答案

当我运行你的 fiddle 时,只要添加一点小东西,它就会在每个框中发布正确的 ID。但是,您的 fiddle 代码中有一个错误。您的代码如下:

 $('.boxes').append('<div class="box" id="'+id+'"><div class="box-content"></div></div>');

我更新它以在每个红色框中显示 id:

 $('.boxes').append('<div class="box" id="'+id+'">'+id+'<div class="box-content"></div></div>');

您的代码中的错误是您使用与采购订单项相同的 ID 命名每个目标框,这会导致多个 dom 对象具有相同的 ID。当您按 ID 检索时,这会给您带来非常不规则的结果。如果您将代码更新为以下内容,那么在您第一次选择 fiddle 中的每个行元素时,目标框将具有唯一的 ID。如果您要允许每个行元素被点击多次,那么您需要添加一个递增的单例变量以保持框 ID 的唯一性。

独特的第一次迭代

 $('.boxes').append('<div class="box" id="box'+id+'">'+id+'<div class="box-content"></div></div>');

每次迭代都是唯一的:

var _s_iter = 0;
$('li.options').click(function() {
  id = $(this).attr('id');
  console.log(id)
  $('.boxes').append('<div class="box" id="box_'+_s_iter+'_'+id+'">'+id+'<div class="box-content"></div></div>');
_s_iter++;
  //Fetching data via ajax

希望对你有帮助

关于javascript - 动态元素正在占用上次单击元素的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44767366/

相关文章:

javascript - NVD3时间格式,带焦点图的线

c# - 从 MVC 中的表单发布列表 <Model>

javascript - 如何使用javascript将可整除数存储在新数组中

jquery - Twitter Bootstrap 使用隐藏而不是显示 :none

javascript - 带有 continue 的 try..finally for 循环如何在 JavaScript 中工作?

jQuery 工具 - 幻灯片

jquery - 添加不透明背景而不与其他元素重叠

html - CSS :checked doesn't work in IE on IIS 7 server

javascript - 如何在 Bootstrap 5 表格中使用排序、搜索和每页显示

html - 将悬停状态添加到兄弟