点击多个表单要求确认并提交该表单

时间:2016-07-20 22:15:26

标签: php jquery

所以我有一个包含几个条目的表。您可以删除每个条目(这是使用Laravel 5.2的建议方式):

<form class="delete" action="//localhost:3000/admin/market-managers/11" method="POST">

    <input type="hidden" name="_token" value="XXXXXXXXXXXXXXXXXXX">
    <input type="hidden" name="_method" value="DELETE">

    <button type="submit" class="delete-button"></button>

</form>

<div class="confirmation-buttons">
  <button class="confirm-button">Confirm</button> 
  <button class="cancel-button">Cancel</button>
</div>

现在这很有效。但我想要&#34;确认或取消&#34;按钮设置为弹出。所以我写了这个:

$('.delete').on('submit', function(event) {

  event.preventDefault();

  var form = $(this);

  $(this).next('.confirmation-buttons').show();

  $('.cancel-button').click(function() {
    $(this).parent('.confirmation-buttons').hide();
  });

  $('.confirm-button').click(function() {
    form.submit();
  });

});

它的工作方式如同显示,如果你取消它们隐藏,但如果你确认没有任何反应。

1 个答案:

答案 0 :(得分:1)

问题是您在确认按钮中添加了多个$(function() { var form; $('.cancel-button').click(function() { $(this).parent('.confirmation-buttons').hide(); form = null; }); $('.confirm-button').click(function() { if (form) { form.submit(); } }); $('.delete').on('submit', function(event) { event.preventDefault(); form = this; $(this).next('.confirmation-buttons').show(); }); }); 处理程序。每次单击表单的提交按钮时,它都会向确认按钮添加另一个单击处理程序。单击取消按钮不会删除此项,因此当您最终单击确认按钮时,它将运行所有累积的点击处理程序。它们将按照添加的顺序运行,因此它将提交用户提交的第一个表单,即使它们已取消它。由于提交表单会重新加载页面,因此他们确认的实际表单将不会被提交。

通常,在其他事件处理程序中添加事件处理程序是错误的。每次用户点击提交时都不要添加点击处理程序,只需绑定一次,使用全局变量记住他们点击提交按钮的最后一个表单。

form

设置this时,请使用$(this)而不是form.submit(),以便$('.delete').on('submit')只运行标准的Javascript提交功能,而不是重新运行jQuery处理程序。

或者,您可以使用$('.delete-button').on('click'),而不是使用type="button",并将删除按钮更改为type="submit"而不是select number , count (*) as 'count' from mytable group by number