javascript - 函数不想触发

标签 javascript jquery

我不明白为什么 check() 函数不想触发,我知道如果我将此函数设置为 setInterval(check, 1000)或函数 $("#btn-click") 它会起作用,但为什么现在不起作用?如果您能解释一下我将不胜感激

$(function() {
  $("#field").on("keyup", function() {
    var x = $(this).val();
    $("#outcome").text(x);
  });

  $("#btn-save").click(function() {
    var name = $("#outcome").text();
    var x = $("table tbody").append("<tr><td>" + name + "</td></tr>")
    $("#field").val("");
    $("#outcome").text("");
  });

  check();

  function check() {
    if ($("table tbody").has("tr")) {
      $("table tbody tr td").on("click", function(e) {
        var tar = $(e.target);
        var b = $(this);
        if (tar.is(b)) {
          b.css("color", "red");
        }
      });
    }
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
  <input type='text' id='field'>
  <p>The result is: <span id="outcome"></span></p>
  <span id="btn-save" class="btn-save">save</span>
  <table>
    <thead>
      <tr>
        <th>Names</th>
      </tr>
    </thead>
    <tbody>
    </tbody>
  </table>
</body>

最佳答案

函数触发,但没有 td 元素可以附加事件。

如果要将事件绑定(bind)到将动态生成的元素上,则不需要检查函数,只需使用 $(body').on(evtType,selector,handler)

查看下面的示例。您动态添加的每个 td 仍将绑定(bind)到事件监听器,因为它附加到“body”。

$(function() {
  $("#field").on("keyup", function() {
    var x = $(this).val();
    $("#outcome").text(x);
  });

  $("#btn-save").click(function() {
    var name = $("#outcome").text();
    var x = $("table tbody").append("<tr><td>" + name + "</td></tr>")
    $("#field").val("");
    $("#outcome").text("");
  });

  check();

  function check() {
      console.log('firing')
  }

  $('body').on('click', 'table tbody tr td', function(e) {
    var tar = $(e.target);
    var b = $(this);
    if (tar.is(b)) {
      b.css("color", "red");
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
  <input type='text' id='field'>
  <p>The result is: <span id="outcome"></span>
  </p>
  <span id="btn-save" class="btn-save">save</span>
  <table>
    <thead>
      <tr>
        <th>Names</th>
      </tr>
    </thead>
    <tbody>
    </tbody>
  </table>
</body>

关于javascript - 函数不想触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40934283/

相关文章:

JavaScript;函数 (x,y,z),对如何传递值感到困惑

jQuery 下拉菜单高度在鼠标光标移动后增加

javascript - 将项目列表从 $.get() 传递到 MVC Controller

javascript - 删除 Javascript/JQuery 中第一组引号之外的所有内容

jquery - 将 DIV 内容居中到视口(viewport)

javascript - 在 SuiteScript 2.0 中创建自定义库模块?

javascript - JSON 输出在代码中仍未定义,但警报正常,这是范围问题吗?

javascript - 正则表达式无法正常工作

javascript - 单击和悬停时的 Bootstrap 3 Popover

javascript - 如果用户已在数据库中可用,将显示错误消息