如何制作一个Javascript按钮onclick()调用一个函数,打开一个带Ajax请求的bootstrap模式?

时间:2018-03-15 07:17:15

标签: javascript jquery ajax bootstrap-4 bootstrap-modal

我正在尝试创建一个bootstrap 4模式,当在一个动态创建的元素中按下一个按钮时会打开它,该元素会对预先填充了相关id的数据的表单发出Ajax请求,然后按一个按钮来保存将更新的信息更新到数据库中。

目前,编辑按钮打开一个新页面“editData”,其中包含与传递的id相关联的预填充数据,然后可以在按下按钮时更新信息,然后返回上一页。

有什么方法可以让按钮在当前页面上打开一个可以提供相同功能的模态?

function populateData(dataInput) {
  var row = $('<tr id=' + dataInput.id + '/>');
  $('#table').append(row);
  row.append($('<td>' + dataInput.name + '</td>'));
  row.append($('<td>' + dataInput.description + '</td>'));
  row.append($(
    '<td><input type="submit" class="btn btn-warning" value="edit" onclick="edit(' +
    dataInput.id + ')"/>'));
}

function edit(id) {
  $.ajax({
    type: 'GET',
    url: '/getData?id=' + id,
    success: function(data) {
      var dataInput = JSON.parse(data)[0];
      window.location = '/editData?id=' + dataInput.id;

    }
  })
}

这是动态填充表的getData

app.get('/getData', function(req, res) {
  var content = {};
  mysql.pool.query('SELECT * FROM dataTable WHERE id=?', [req.query.id],
    function(err, rows, fields) {
      if (err) {
        next(err);
        return;
      }
      content.results = JSON.stringify(rows);
      res.send(content.results);
    });
});

这是editData.handler内容

<div>
  <form id="form">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" placeholder="">

    <label for="description">Description:</label>
    <textarea id="description" name="description" rows="4" cols="50"></textarea>
  </form>
  <div class="centerButton">
    <input id="submit" class="btn btn-primary" type="submit" value="Save" onclick="save()" />
  </div>
</div>

1 个答案:

答案 0 :(得分:0)

这是一个简单的bootstrap模式。

<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

现在JavaScript部分用于发出ajax请求并将数据嵌入到模态中。

function populateData(dataInput) {
  var row = $('<tr id=' + dataInput.id + '/>');
  $('#table').append(row);
  row.append($('<td>' + dataInput.name + '</td>'));
  row.append($('<td>' + dataInput.description + '</td>'));

  //check that I have added attributes data-toggle and data-target to point example modal
  row.append($(
    '<td><input type="submit" data-toggle="modal" data-target="#exampleModal" class="btn btn-warning" value="edit" onclick="edit(' +
    dataInput.id + ')"/>'));
}

function edit(id) {
  $.ajax({
    type: 'GET',
    url: '/getData?id=' + id,
    success: function(data) {
      var dataInput = JSON.parse(data)[0];

      //commented following line and adding code to embed data into modal  
      //window.location = '/editData?id=' + dataInput.id;
      $('.modal-body').html('html that you want to show');
    }
  })
}

它有效,这里是demo on Codepen

请确保您包含bootstrap和jquery。