Javascript click 事件不是第一次触发

标签 javascript jquery html asp.net

我有一个 ASP.NET 应用程序,我从后端获取数据,并使用 JavaScript 中的一个函数来设置我的点击事件。我想要的输出(目前)是看到一个警告框,其中包含说明我单击了哪个行索引的文本。

这是我的javascript代码:

<script>
    function OnSelect() {
    var table = document.getElementById("table-list");
    var rows = table.getElementsByTagName("tr");

    for (i = 0; i < rows.length; i++) {
        var currentRow = table.rows[i];
        var createClickHandler =
            function(row)
            {
              return function () {
                var cell = row.getElementsByTagName("td")[0];
                var id = cell.innerHTML;
                $.ajax({
                  type: "post",
                  url: "/Foo/FooSelected",
                  data: { name: id },
                  success: function (data) {
                    alert(data); //works the second time I click
                  }
                });
              };
            };
        currentRow.onclick = createClickHandler(currentRow);
    }
  }
</script>

只是为了展示这是我在 html 上添加函数的方式:

<table id="table-list" class="table table-striped table-sm" runat="server">
              <thead>
                <tr>
                  <th>My Foo Table</th>
                </tr>
              </thead>
              <tbody>
                @for (int i = 0; i < Model.FooCollection.Count; i++)
                {
                  <tr onclick="OnSelect()" style="cursor:pointer;">
                    <td>@Model.FooCollection[i].FooName</td>
                  </tr>
                }
              </tbody>
            </table>

我的问题是,在我第二次点击任意行后出现警告框。我需要做什么才能让我的警告框在单击后显示?非常感谢。

最佳答案

因为您似乎使用的是纯 javascript,所以我会这样做,(将其放在您的脚本标记中):

document.addEventListener("DOMContentLoaded", function(){
    // Handler when the DOM is fully loaded
     var table = document.getElementById("table-list");
     var rows = table.getElementsByTagName("tr");
     for (i = 0; i < rows.length; i++) {
          var currentRow = table.rows[i];


          currentRow.onclick = function(row)
          {
            return function () {
               var cell = row.getElementsByTagName("td")[0];
               var id = cell.innerHTML;
               $.ajax({
               type: "post",
               url: "/Foo/FooSelected",
               data: { name: id },
               success: function (data) {
                   alert(data); //works the second time I click
              }
            });
          };
        };
   }
});

关于Javascript click 事件不是第一次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48629644/

相关文章:

javascript - 不使用 jQuery 切换父元素 onclick 类

javascript - 如何在 javascript 或 jquery 中渲染 json 对象的内部数组

javascript - 如何检查在输入字段中输入的值在AngularJS中是否已经可用

javascript - D3 过渡框阴影中的 CSS 值

javascript - Ember : Model as content for CollectionView

javascript - Passport js 中的 isAuthenticated() 始终返回 false

javascript - 为什么使用 Promise.all 时在 Promise 中返回 snapshot.val() 不起作用?

c# - 具有高级功能的表

jquery - 带有 jQ​​uery 的 HTML5 - e.offsetX 在 Firefox 中未定义

javascript - 如何将当前日期的两天添加到隐藏输入的值