首页 > 解决方案 > 尝试读取元素的文本仅显示第一个元素的文本

问题描述

我正在从控制器中获取一个列表,并使用 ASP.Net MVC 在视图中以平铺格式显示它。

当我单击特定磁贴时,它应该显示该alert特定磁贴的应用程序名称消息。但是,无论我单击哪个图块,我都会获得所有图块的第一个应用程序名称。请帮忙。

<div class="container">
  <section class="cms-boxes">
    <div class="container-fluid">
      <div class="row">
        @foreach (var item in Model) 
        {
          <div class="col-md-4 cms-boxes-outer">
            <div class="cms-boxes-items cms-features">
              <div class="boxes-align">
                <div class="small-box">
                  <h2 class="appnamedisplay">@Html.DisplayFor(modelItem => item.ApplicationName)</h2>
                  <p>@Html.DisplayFor(modelItem => item.number)</p>
                </div>
              </div>
            </div>
          </div>
        }
      </div>
    </div>
  </section>
</div>
$(document).ready(function() {
  $(".small-box").click(function() {
    var name = $(".appnamedisplay").html();
    alert(name);
  });
});

标签: javascriptjqueryhtmlasp.net-mvc-4

解决方案


问题是因为您要选择所有.appnamedisplay元素。调用html()该集合只会显示该集合中第一个元素的值。

要解决此问题,请使用 DOM 遍历查找.appnamedisplay与 clicked 相关的特定元素.small-box。为此,请使用this关键字来引用引发事件的元素,以及 jQuery 的find()方法:

$(".small-box").click(function () {
  var name = $(this).find(".appnamedisplay").html();            
  console.log(name);
});

还要注意调试的首选用途console.log(),因为它不会阻止 UI 更新,也不会像原来那样强制数据类型alert()


推荐阅读