将事件附加到动态创建的表单

attach an event to dynamically created forms

我有一个简单的网页,它从数据库中获取项目列表并将它们呈现为可以由用户更新的表单。我正在尝试获取提交事件并使用 ajax 更新表单。不过,我不知道如何让我的 jQuery 函数知道我新创建的表单。这是我的 HTML:

<body>
  <ul class="flight-list">
    <li>
      <form>form stuff</form>
    </li>
    <li>
      <form>form stuff</form>
    </li>
    <li>
      <form>form stuff</form>
    </li>
    <li>
      <form>form stuff</form>
    </li>
    ... etc
 </ul>
 <form>Form to add new records</form>

创建新记录的表单完全符合预期,并且不是动态创建的。

这是jQuery:

创建表单:

$('form').on('submit', function(event){
    event.preventDefault();
    var form = $(this);
    var flightData = form.serialize();

    $.ajax({
        type: 'POST', url: '/flights', data: flightData
      }).done(function(data){
        var i = data.length - 1;
        var flight = data[i];
        addFlightsForm([flight]);
        form.trigger('reset');
    });
  });

更新表格:

$('form').on('submit', function(event){
    event.preventDefault();
    var form = $(this);
    var flightData = form.serialize();

    $.ajax({
      type: 'PUT', url: '/flights/27', data: flightData
    }).done(function(data){
      // update specific form with new value
    })
  })

我知道有一些方法可以将事件附加到动态创建的元素,但我不知道该怎么做。

将侦听器附加到文档

$(document).on('submit', 'form', yourHandler);

我的声誉不够高,无法对您的

添加评论

"Can you give me an example with my jQuery? $('document').on('submit', 'form', function(event){alert("你好);});什么也没有发生。”但是,

确保代码被

包围
$(document).ready(function () {
//your code
});

看看LiveQuery

LiveQuery

这是一个 getaway-package,它将事件处理程序附加到元素发生的事件,无论它们是动态生成的还是已经存在。

var $mylist = $('#mylist');
$mylist.livequery(
    '.element', // the selector to match against
    function(elem) { // a matched function
        // this = elem = the li element just added to the DOM
    }, function(elem) { // an unmatched/expire function
        // this = elem = the li element just removed from the DOM
    });