2

我有一个注册到应用程序的用户列表,对于管理员来说,可以选择删除任何注册的用户。我有使用 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 的正确方法,以便能够在消息中获取当前单击的“删除”按钮的隐藏输入名称值,那就太好了!

在此先感谢您的帮助!

4

2 回答 2

3

您需要使您的选择器特定于$(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()将仅返回集合中第一个元素的值,从而返回您所看到的行为。

这是val()来自 jquery 代码的片段

   val: function( value ) {
    var ret, hooks, isFunction,
        elem = this[0]; //<--- It just takes first element in the collection

    if ( !arguments.length ) {
        if ( elem ) {
    ...........
于 2013-10-15T20:26:17.723 回答
0

我想我终于找到了我的问题的答案:

这是有效的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 get value from hidden input in column

感谢您的帮助stackoverflow!:)

于 2013-10-15T20:36:22.803 回答