【问题标题】:calling .click() script inside another function在另一个函数中调用 .click() 脚本
【发布时间】:2015-01-05 19:49:18
【问题描述】:

您好,我正在尝试使用 append() 生成动态 HTML 表格。我编写代码的方式是,如果用户想在 localStorage 中输入数据,它首先检查它是否为空。如果为空,则执行 if 块中的代码。如果不为空,则else 块 被执行。所有这些代码都在 getDetails() JavaScript 函数中。我已将动态生成的表 id 指定为“myTable”。

  <table align="center" id="myTable">

  </table>

  <script>
   function getdetails(){
      if(localStorage.length == 0){
          ......
       }
      else{
          do something ...
      }

      }
  <script>

问题是我点击表格行时需要获取行号。为此我创建了以下函数。

    $(window).load(function() {

     $("#myTable tr").click(function(){
        .....
        });
     });

当页面第一次刷新或加载时,上面的代码被执行(window.load)。但是当我在 HTML 表中添加另一行时(代码执行 else 块,因为 localStorage 不为空)并单击任何表行代码不起作用。谁能告诉我如何让 .click() 每次都能正常工作。谢谢。

【问题讨论】:

  • 删除已弃用的align="center";改用 CSS。
  • 嗨 Raptor 你有什么实质性的贡献可以帮助我们更接近解决方案吗?

标签: javascript jquery html


【解决方案1】:

您可以使用 on 关键字绑定事件以处理动态 DOM 元素

试试这样:

$("#myTable").on('click','tr',function(){

        //logic here..

 });

【讨论】:

    【解决方案2】:

    实际问题是您试图在页面加载时不存在的行上添加点击事件。它们将在脚本执行后加载。因此解决此问题的方法是从 window.load 中删除点击事件并将其添加到数据填充代码之后的脚本。

    您也可以使用 jquery 的 .on() 事件,在任何情况下都可以使用。

    【讨论】:

      【解决方案3】:

      试试这个:

       $("#myTable tr").click(function(){
            alert('You clicked row '+ ($(this).index()+1) );
       });
      

      来源:Which row number is clicked in a table

      【讨论】:

        【解决方案4】:

        使用这个

        $(document).on('click','#myTable tr',function(){

        // 你的代码 });

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-13
          • 1970-01-01
          相关资源
          最近更新 更多