在代码生成的输入元素上访问 keyup 事件

Access keyup event on input element generated by code

在我的项目中,我生成 div 个元素,这些元素包含输入字段以及来自我的数据库的请求响应数据,给定搜索参数。我需要能够在其上使用 keyup 事件来做一些额外的工作,但是 class 选择器在使用 append 生成输入时不起作用,即使它在检查时具有 class .

我创建了一个演示它的 CodePen:http://codepen.io/leofontes/pen/PNgabB?editors=1111

HTML

<div class="container" id="container">
  <button id="button">Click</button><br>
</div>

CSS

.container {
  background-color: #F00;
  height: 200px;
  width: 200px;
}

.dynamic-input {
  margin: 5px;
}

Javascript / jQuery

$(document).ready(function () {
  $('#button').click(function() {
    for(var i = 0; i < 5; i++) {
      $('#container').append('<input type="text" class="dynamic-input">')
    }
  });


  $('.dynamic-input').keyup(function() {
    console.log($(this).val());
  });
});

jQuery 代码运行良好,我使用 $(document).ready 函数中生成的输入对其进行了测试,它实现了我的预期,我不明白为什么它在运行时没有运行稍后生成。

我也尝试过隐藏输入 class 已经加载了 HTML 但这也不起作用。

感谢所有想法或建议,谢谢

试试这个:

$(document).ready(function () {
  $('#button').click(function() {
    for(var i = 0; i < 5; i++) {
      $('#container').append('<input type="text" class="dynamic-input">')
    }
  });


  $(document).on('keyup', '.dynamic-input', function() {
    console.log($(this).val());
  });
});

动态生成的元素需要 event delegation

$('#container').on('keyup', '.dynamic-input', function () {
    console.log($(this).val());
});

那是因为您在创建元素之前执行了 jquery 绑定。 当 $('.dynamic-input').keyup 被执行时。您在单击按钮后创建的输入尚不存在。

问题在于您是在创建绑定的同时分别创建按钮。您应该做的是创建输入并将点击事件绑定为回调的一部分。现在,您在语法方面正确地绑定了元素,但它还不存在。所以,你想要的是。

$(document).ready(function () {
  $('#button').click(function() {
    for(var i = 0; i < 5; i++) {
      $('#container').append('<input type="text" class="dynamic-input">')
    }
    //You're still within the scope of the callback, so this is the appropriate location
     $('.dynamic-input').on('keyup, function() {
        console.log($(this).val());
    });

  });