0

我正在构建一个作为网站主页一部分的 div。此 div 显示项目列表。这些项目都保存在 MySQL 数据库中。我想要做的是在每行旁边创建一个按钮,上面写着“删除”。单击删除后,应使用 jQuery UI 对话框提示用户进行确认。当确认删除项目时,必须将项目 id 发送到删除页面(我们称之为 delete.php)。

到目前为止我的工作

  • 从 MySQL 获取项目列表并将每个项目显示为一行
  • 在每行末尾添加了一个删除按钮
  • 单击删除按钮时,将显示对话框,要求确认
  • 当用户确认删除项目时,他被发送到删除页面。

这就是我被困住的地方。在删除页面上,我回显项目 ID 以查看它是否有效。不知何故,delete.php 页面总是回显第一个项目的 id。这意味着 jquery 总是发送第一个项目的 id。

我该如何解开这个谜团?

$currents    =   new Project();
$currents    =   $currents->getProjects($_SESSION["user"], "finished");
echo "<table>";
foreach($currents as $current){
 echo "<tr><td>" . $current["name"] . "</td>
 <td><form method='post' class='deleteproject' action='/requests/request.php'/>
 <input type='hidden' name='projectid' value='" . $current['id'] . "' />
 <input type='button' value='Delete' class='deleteproject'></form></td></tr>";

}
echo "</table>";

这是jQuery;

<script>
  $(function()
  {
      $( ".deleteproject" ).click(function() {
          $( "#dialogbox" ).attr('title', 'Are you sure you want to delete this project?').dialog({
              height: 100,
              width: 350,
              modal: true,
              buttons : {
                  "Confirm" : function() {
                      $('.deleteproject').submit();
                  },
                  "Cancel" : function() {
                      $(this).dialog("close");
                  }
              }
          });
          return false;
      });
  });
  </script>
4

1 回答 1

1

这样做时$('.deleteproject').submit();,您总是发送第一个.deleteproject而不是点击的那个。为了解决这个问题,您可以保存this参考并提交您的父表单。

$( ".deleteproject" ).click(function() {
  $this = $(this);
  $( "#dialogbox" ).attr('title', 'Are you sure you want to delete this project?').dialog({
      height: 100,
      width: 350,
      modal: true,
      buttons : {
          "Confirm" : function() {
              $this.closest('form').submit();
          },
          "Cancel" : function() {
              $(this).dialog("close");
          }
      }
  });

旁注:您的表单类名称也是.deleteproject,因此即使您不单击按钮,但在表单上,​​您的函数也会触发。另外,(不确定)我认为你的脚本会因为事件冒泡而触发两次。单击按钮deleteproject也是单击表单deleteproject

于 2013-06-10T17:31:20.423 回答