You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取jQuery each循环渲染的被点击指定div对应的Pumpno值

问题核心原因

  • 点击事件绑定对象错误:你将点击事件绑定到了所有泵的共同父容器.pump_container上,触发事件时读取的是父容器的属性,自然无法获取到单个点击泵对应的数值
  • 动态元素绑定逻辑错误:直接使用.click()绑定仅对页面初始加载时已存在的DOM生效,你通过AJAX动态渲染的泵元素无法被该绑定命中
  • 若你之前尝试在循环内直接给每个泵绑定事件,还会存在变量作用域的闭包问题,所有回调都会读取到最后一次循环的pumpNo值,这就是你点任何元素都返回最后一个值的原因
  • 你拼接DOM的代码存在冗余无效属性,会导致HTML结构异常,进一步影响属性读取

修复方案

第一步:优化DOM渲染逻辑

修正无效属性,建议使用HTML5标准的data-*自定义属性存储pumpNo,避免和原生属性冲突:

function pumps() {
  $.get("Pumpstates", {}, function(data) {
    $(".pump_container").empty()
    $.ajaxSetup({
      cache: false
    });
    $.each(data, function(index, value) {
      // 新增data-pump-no属性存储数值,删除原有冗余代码
      $(".pump_container").append('<div class="block_grid_three p' + value.pumpNo + '" data-pump-no="' + value.pumpNo + '" />');
      // 删掉原有拼接中多余的无效属性 ' + value.pumpNo + ' "
      $(".p" + value.pumpNo).append('<span class="pump_button pump_link" data-pump-no="' + value.pumpNo + '"><div class="pump_block' + value.pumpNo + '"></div></span>');
      if (value.state <= 2) {
        $(".pump_block" + value.pumpNo).css('background-image', 'url("/PumpImages/Alien Icons-05.png")');
      } else if (value.state == 3 || value.state == 17) {
        $(".pump_block" + value.pumpNo).css('background-image', 'url("/PumpImages/Alien Icons-17.png")');
      } else if (value.state == 4) {
        $(".pump_block" + value.pumpNo).css('background-image', 'url("/PumpImages/pump_idle.gif")');
      } else if (value.state == 5 || value.state == 32) {
        $(".pump_block" + value.pumpNo).css('background-image', 'url("/PumpImages/pump_calling.gif")');
        $(".pump_block" + value.pumpNo).append(' <span class="pump_no">Pump: ' + value.pumpNo + '</span>');
        $(".pump_block" + value.pumpNo).append(' <span class="Goal"> volume :' + value.volume + '</span>');
        $(".pump_block" + value.pumpNo).append(' <span class="Goal">Price :' + value.price + '</span>');
        $('.p' + value.pumpNo).not(':last').remove();
      }
    });
  })
}

第二步:修改点击事件绑定逻辑

使用jQuery事件委托机制绑定动态元素,直接获取当前点击元素的属性,完全规避闭包问题:

$(document).ready(function() {
  // 父容器绑定事件,指定只有点击子元素.pump_link时才触发回调
  $(".pump_container").on("click", ".pump_link", function() {
    // 读取当前点击元素上存储的pumpNo值
    var PumpNo = $(this).data('pump-no');
    $.ajax({
      type: "Post",
      url: "/Account/SelectedPumps",
      cache: false,
      data: {
        pumpNo: PumpNo
      },
      complete: function() {}
    })
  })
})

内容的提问来源于stack exchange,提问作者stannis Barracuda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 11:24:10