从页面上单击的表单中获取隐藏的输入值


Get hidden input value from clicked form on page

我有一个注册到应用程序的用户列表,对于管理员来说,有一个选项可以删除任何注册的用户。我有使用 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 从列中的隐藏输入中获取值

感谢您的帮助 堆栈溢出! :)