我有一个注册到应用程序的用户列表,对于管理员来说,有一个选项可以删除任何注册的用户。我有使用 PHP 从数据库中填充的列表。
因此,此列表中的每个用户都会在此表中获得一个包含所有用户的 tr 行。在右栏中,我有一个按钮,只有管理员才能在此用户表上看到,他可以通过单击"删除"按钮来删除该特定用户。
我希望在删除发生之前,这工作正常,应该有一个弹出窗口提醒管理员询问"您确定要从系统中删除"空白"吗?"空白具有管理员单击删除按钮的用户的名称。
现在我确实在附加到删除按钮的隐藏输入字段中有用户的名称,换句话说,我在那个句子中得到了一个名字,但问题是当我单击用户列表中的任何一个删除按钮时,列表中第一个人的相同名称就会显示。因此,为了澄清,尽管删除发生在正确的用户身上,因此删除了我要删除的用户,但确认警报中的名称始终与第一个用户的名称一起显示。
我相信这是我编写jquery代码的方式存在的问题,因此任何对此的帮助将不胜感激,我已经坐了一段时间,已经试图在网上找到答案。
所以简而言之:我在页面上有几个"表单"(即表示"删除"按钮,它会导致一个"表单",其中包含我们希望删除的用户的隐藏输入信息,被发送到后端,以便后端知道要删除哪个用户。
删除功能工作正常 - 删除所需的用户。
但是,警报功能不会向管理员填充所需的消息,因为消息中的用户名不会因用户而异,并且它始终抓取用户列表中第一个用户的名称。
以下是用户列表的代码:
<table class="table table-striped table-bordered">
<thead class="dark_grey">
<th>ID</th>
<th>Name</th>
<th>Email</th>
<th>Created At</th>
<th>User Level</th>
<th>Actions</th>
</thead>
<tbody>
<?php
foreach ($user_rows as $row)
{
echo "<tr>";
echo "<td>{$row['id']}</td>";
echo "<td><a href='/ci/user/user_profile/?={$row['id']}'>{$row['first_name']} {$row['last_name']}</a></td>";
echo "<td>{$row['email']}</td>";
echo "<td>{$row['created_at_time']}". " " ."{$row['created_at_date']}</td>";
if($row['user_level'] != '9')
{
$row['user_level'] = 'normal';
echo "<td>{$row['user_level']}</td>";
}
else
{
$row['user_level'] = 'admin';
echo "<td>{$row['user_level']}</td>";
}
echo "<td class='last_td'>
<form class='float_left' action='/ci/user/edit_user' method='post'>
<input type='hidden' name='email' value='{$row['email']}'/>
<input class='btn btn-success' type='submit' value='Edit' />
</form>
**<form class='delete' action='/ci/user/delete_user' method='post'>
<input type='hidden' name='email' value='{$row['email']}'/>
<input type='hidden' name='name' value='{$row['first_name']} {$row['last_name']}' />
<input class='btn btn-danger' type='submit' value='Delete' />
</form>**
</td>";
echo "</tr>";
}
?>
</tbody>
</table>
这是jquery代码:
<script type="text/javascript">
$(document).ready(function () {
$('.delete').submit(function () {
var name = $('input[name="name"]').val();
alert("Are you sure you would like to delete " + name + " from the system?");
return false; //I just have this here so the delete didn't take place when testing the alert function.
});
});
</script>
所以我知道不知何故我需要在当前单击(".delete")上发出警报,但是当我尝试使用 $(this) 时,它并没有真正起作用。很可能我用错了。如果有人能向我展示编写 jquery 的正确方法,以便能够在消息中获取当前单击的"删除"按钮的隐藏输入名称值,那就太好了!
提前感谢您的帮助!
使您的选择器特定于$(this).find('input[name="name"]').val()
。
尝试:
$('.delete').submit(function(){
var name = $(this).find('input[name="name"]').val();
alert("Are you sure you would like to delete " + name + " from the system?");
return false; //I just have this here so the delete didn't take place when testing the alert function.
});
当你这样做$('input[name="name"]').val()
它匹配多个input name=name
所以jquery方法val()
将只返回集合中第一个元素的值,从而返回你所看到的行为。
这是来自 jQuery 代码val()
片段
val: function( value ) {
var ret, hooks, isFunction,
elem = this[0]; //<--- It just takes first element in the collection
if ( !arguments.length ) {
if ( elem ) {
...........
我终于找到了问题的答案:
以下是有效的jquery代码:
<script type="text/javascript">
$(document).ready(function(){
$('.delete').submit(function(){
var name = $(this).find('input[name="name"]').val();
alert("Are you sure you would like to delete " + name + " from the system?");
});
});
</script>
找到这篇文章后我得到了答案:jQuery 从列中的隐藏输入中获取值
感谢您的帮助 堆栈溢出! :)