我正在构建一个div,它是网站主页的一部分。此div显示项目列表。这些项目都保存在MySQL数据库中。我要做的是在每行旁边创建一个“删除”按钮。单击删除后,系统将提示用户询问确认的jQuery UI对话框。当确认删除项目时,必须将项目ID发送到删除页面(我们称之为delete.php)。
到目前为止我的工作
这是我被困的地方。 在删除页面上,我回显项目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>
答案 0 :(得分: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
按钮也可以点击表单{{1}}。