【问题标题】:Dynamically created (bootstrap) html table rows - on click event wont trigger [duplicate]动态创建(引导)html表行-点击事件不会触发[重复]
【发布时间】:2017-09-14 12:45:41
【问题描述】:

我在视图中使用引导表,并且表行是动态创建的,并且 创建它们后,我想将 .onclick 事件附加到我的行,以便万一有人单击该行,我可能会突出显示它, 我试了试,不知道怎么解决。

这是我的代码:

1.) 首先,尝试 - 绝对不好,因为一直在我的行上附加事件,点击几下后弹出 5-6-7 警报..

@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
<script>

     $('#TableItems').click(function (e) {
            $('#TableItems tr').click(function (e) {
                alert("Clicked!");
            });
        });

</script>

2.) 第二次尝试 - 也不好,因为视图已渲染并且 tr 尚未渲染,所以可能无法附加 onclick 事件,因为当我点击它时 什么都没有发生

$('#TableItems tr').click(function (e) {
                alert("Damn");
         });

这是我的桌子

<div class="table-responsive" id="myTable">
   <table class="table table-striped  jambo_table bulk_action">
     <thead>
       <tr class="headings">
          <th class="column-title">Title </th>
        </tr>
     </thead>
    <tbody id="TableItems"></tbody>
   </table>
</div>

【问题讨论】:

  • 您需要event delegation - 例如$('#TableItems').on('click', 'tr', function() { ...
  • @StephenMuecke 你们这些cmets总是很棒的伙伴!很容易认出你知识渊博,很高兴读到你的cmets!再感谢一次!还有一个问题是,对于每个 tr,我生成了 Id = "something" 以及如何从这个 e 对象中获取 Id 值,这是否可能?
  • 是的 - var id = $(this).attr('id'); 但是你为什么要给 tr 元素一个 id 属性(真的没有意义)
  • @StephenMuecke 因为在动态生成的表格中我保存了客户列表,每个客户都有一个 Id,通过单击一行我想用其他信息填充另一个表格..跨度>
  • 您确实应该为此使用 data-* 属性-例如&lt;tr data-customerid="..."&gt;(如果使用 $(this).data('customerid'); 访问)

标签: javascript jquery html asp.net-mvc twitter-bootstrap


【解决方案1】:

您可以为此使用.on()

$('#TableItems').on('click', 'tr', function (e) {
    alert("Damn");
});

【讨论】:

  • document 应该替换为页面首次加载时存在的最近的祖先 - 即#TableItems'
  • @StephenMuecke 我同意你的观点,但是野兔 OP 没有提到最近的祖先,这就是我使用 document 的原因
  • 看看最后一段代码 sn-p 显示的 html :)
  • 好吧,我的错误,我已经用最近的祖先更新了我的答案
猜你喜欢
  • 1970-01-01
  • 2016-07-04
  • 2018-11-13
  • 2012-08-18
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 2020-12-27
相关资源
最近更新 更多