单击事件不适用于动态创建的按钮

安德里亚·梅安迪·菲奥鲁奇

我正在尝试使用包含当前任务文本的对象数组创建交互式教程。

文本创建任务并动态附加按钮。

let currentTutorialCount = 0;
var tutorial = [{
    text: "Welcome, I'll be your Task Manager and Guide <button class = 
   'button-next'> Got it</button>",
    set: function () {
      $('#info-container').addClass('non-active');
      $('#canvas-container').addClass('non-active');
      $('#info-container-transparent').css('display', 'block');
      $('#canvas-container-transparent').css('display', 'block');
      $('#suggestion').html(this.text);
    }
  },
  {
    text: "Here you can find information about your String and Current 
    State <button class = 'button-next'>Got it</button>",
    set: function () {
      $('#info-container-transparent').css('display', 'none');
      $('#info-container-text').addClass('highlightBorder');
      $('#info-container-buttons-transparent').css('display', 'block');
      $('#suggestion').html(this.text);
    }
  },
  {
    text: "Here you can generate new Random Graphs and Strings <button 
    class = 'button-next'>Got it</button>",
    set: function () {
      $('#info-container-text').removeClass('highlightBorder');
      $('#info-container-buttons').addClass('highlightBorder');
      $('#info-container-buttons-transparent').css('display', 'none');
      $('#info-container-buttons-transparent').css('display', 'block');
      $('#suggestion').html(this.text);
    }
  }
];` 

当我单击按钮添加事件侦听器时,计划是通过增加 currentTutorialCount 并调用 set 函数来移动到下一个任务:

    $('.button-next').click(() => {
     currentTutorialCount += 1;
     tutorial[currentTutorialCount].set();
    });

DOM结构如下:

<div id="main-feedback-grid">
  <div id="information">
    <p id="suggestion">Welcome, Make your first transition to the next node</p>
    <button class="answer" value="true">Yes</button>
    <button class="answer" value="false">No</button>
  </div>
</div>

我的问题是单击事件仅在我第一次单击按钮时起作用。我假设每次 set() 函数创建一个新的时,按钮的引用都会丢失。有什么建议么 ?

特里

您遇到了将点击事件绑定到运行时不存在的元素的经典问题。当您的脚本被评估时,元素.button-next尚未出现在 DOM 中,因此单击事件回调不会绑定到按钮。

您想要的是依赖事件冒泡:您想要监听运行时存在的元素,并查看点击事件是否从动态插入的按钮冒泡到静态元素。

由于按钮实际上是作为 的子节点注入的#suggestion,并且#suggestion保证在运行时出现在 DOM 中,因此您可以改为监听冒泡到#suggestion元素的 click 事件

$('#suggestion').on('click', '.button-next', () => {
  currentTutorialCount += 1;
  tutorial[currentTutorialCount].set();
});

一个有用的提示:绑定事件侦听时,始终选择最接近的静态 DOM 元素我们强烈劝阻,听取他们对冒泡evnetsdocument或者body,因为它是昂贵的(JS引擎具有迭代通过所有子节点,以找出哪一个发出的事件)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单击事件不适用于动态添加的按钮或面板

来自分类常见问题

jQuery-Click事件不适用于动态创建的按钮

来自分类Dev

Click事件不适用于动态添加的按钮

来自分类Dev

单击功能不适用于动态创建的元素

来自分类Dev

addEventListener不适用于动态创建的按钮

来自分类Dev

ASP.net动态按钮单击事件不适用于第二个foreach循环

来自分类Dev

jQuery不适用于按钮事件

来自分类Dev

单击事件不适用于由 ckeditor、jquery 生成的动态内容

来自分类Dev

动态元素上的 Jquery 单击事件不适用于变量

来自分类Dev

单击事件不适用于列表视图项中的按钮

来自分类Dev

谷歌地图addListener不适用于输入按钮单击事件

来自分类Dev

单击 jquery 调用不适用于按钮单击

来自分类Dev

单击功能不适用于Safari上动态创建的选择器

来自分类Dev

滚动功能适用于某些单击事件,但不适用于其他事件

来自分类Dev

jQuery单击事件不适用于AngularJS

来自分类Dev

jQuery循环单击事件不适用于eq(i)

来自分类Dev

单击事件不适用于锚标记

来自分类Dev

jQuery 事件委托不适用于单击 div

来自分类Dev

Javascript 数组拼接不适用于 JQuery 单击事件

来自分类Dev

jQuery单击功能不适用于动态元素

来自分类Dev

Jquery 单击不适用于动态添加的链接

来自分类Dev

AngularJS活动状态不适用于单击的按钮

来自分类Dev

单击“登录按钮”不适用于Selenium Java代码

来自分类Dev

单击时按钮不适用于jQuery

来自分类Dev

按钮onclick不适用于首次单击

来自分类Dev

克隆按钮不适用于单击功能

来自分类Dev

Sendkeys.send 不适用于单击按钮

来自分类Dev

jQuery事件不适用于动态提取的HTML

来自分类Dev

jQuery事件不适用于动态附加的元素

Related 相关文章

热门标签

归档