javascript - 为什么控制台消息显示多次?

标签 javascript jquery

我在 jquery 中做了一个简单的示例。在我的示例中,用户可以使用 add 添加多个条目按钮。 示例 "one","two" 。每个条目中有“X”文本。我正在“X”上绑定(bind)点击事件 spanhttps://jsfiddle.net/kzcozeeg/1/

问题事件被绑定(bind)多次为什么? 示例添加两个条目“一”和“二”。在第一个条目(一)上单击“X”。它显示控制台消息两次,为什么?

$(function() {
    $('#btn').click(clickhandler)
    function clickhandler(params) {
        var user= $('.username').val();
        var str = '<div><span>'+user +'</span>  <span class="abc">X</span></div>' 
        $('#wrapper').append(str);
        $('.abc').on('click',function () { 
         console.log($(this).prev('span').text())
         })
    }
})

谢谢

最佳答案

Delegate click event相反:

$(function() {
  $('#btn').click(clickhandler)

  function clickhandler(params) {
    var user = $('.username').val();
    var str = '<div><span>' + user + '</span>  <span class="abc">X</span></div>'
    $('#wrapper').append(str);

  }

  $('#wrapper').on('click', '.abc', function() {
    console.log($(this).prev('span').text())
  })
})

这样,您就可以处理动态元素上的点击事件(因为点击事件会冒泡)。

您的问题是因为每次点击 #btn 时,您都会在每个 .abc 元素上添加一个新的点击事件,而不会删除任何先前绑定(bind)的事件。

关于javascript - 为什么控制台消息显示多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958758/

相关文章:

javascript - 执行 javascript/jquery/CSS 和其他 HTML 页面呈现控件的顺序应该是什么?

javascript - 执行 "tab"键 onkeyup() 的操作

jquery - mouseenter 和 mouseleave 在 jquery 中不起作用

jquery - $.get 请求数量未知;如何有效上链?

javascript - 每 30 秒运行一个函数 javascript

javascript - 转换为字符串时保留嵌套数组结构,JavaScript

javascript - 使用 ews-javascript-api 更新交流 session 时出错

javascript - 滚动时将每个 div 视为 "page"

javascript - 如何在窗口加载事件中随机更改背景颜色到背景图像?

javascript - jquery 循环向上/向下移动