【问题标题】:Await function on button click按钮单击时的等待功能
【发布时间】:2019-12-21 17:01:23
【问题描述】:
async function init() {
  $("#present").slideDown(100);
  setTimeout(btnClose, 4000);
  function btnClose(){ 
    $("#present").slideUp(100);
  }
  $("#present").click(async function() {
    await timerOn();
  });
  moveFunction();
}

单击按钮会调用我的init 函数...之后屏幕上会出现一个新按钮...我想调用timerOn 函数但单击按钮...现在请注意我的一件事在onClick 中添加了“异步”,因为它给出了一个错误,等待只能在异步函数中使用....

我的目的是 moveFunction 应该在 timerOn 完全执行后才被调用...

它会达到目的吗?请帮忙...

【问题讨论】:

  • 你应该在await timerOn();之后将moveFunction();移动到点击处理程序中
  • 您也应该将timerOn 的代码添加到您的问题中。
  • @Eldar 我认为它会起作用,但它不起作用。
  • @Andy 我的 timerOn 函数由 setInterval 组成,其中出现一个调用另一个函数的按钮

标签: javascript jquery function async-await onclick


【解决方案1】:

由于按钮将动态生成,因此脚本将不知道最近创建的 DOM 元素,因此您必须将事件委托给按钮,如下所示(假设您在按钮上使用 .present 类):

 
$( "body" ).delegate( "button.present", "click", function() {
  //do your stuff here
});

【讨论】:

  • 我实际上是一个新手,我不知道委托功能,但我阅读了 jquery 文档并试图理解。我明白了一点,但我不知道如何在我的代码中使用它。如果您用更简单的语言向我解释一下,将会有很大帮助。提前感谢您!
  • 我们使用委托将处理程序附加到与选择器匹配的所有元素的一个或多个事件(例如"button.present"),无论元素已经存在于DOM中还是将被添加到未来。您可以将click 事件替换为上述事件。我提到do your stuff here的地方,你可以调用你的方法timerOn();
  • @RG1nine 我知道这有点令人困惑,但请通过以下小提琴,Simple event delegation example 如果这不是您要寻找的,那么请在新的JS Fiddle 中发送模拟您的场景,我们会在那里为您提供帮助。提前致谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 2023-01-10
  • 2013-06-21
  • 1970-01-01
  • 2022-01-13
  • 2019-01-11
相关资源
最近更新 更多