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

时间:2013-10-15 20:21:04

标签: php jquery html forms hidden-field

我有一个注册到该应用程序的用户列表,对于admin,有一个选项可以删除任何已注册的用户。我使用PHP从数据库中填充了列表。

因此,此列表中的每个用户都会在此表中获得包含其中所有用户的tr行。在右栏中,我有一个按钮,只有管理员在此用户表上看到,他可以通过单击“删除”按钮删除该特定用户。

我想在删除之前发生这种情况,工作正常,应该有一个弹出警告管理员询问“你确定要从系统中删除”空白“吗?”如果空白,则管理员点击了删除按钮的用户名。

现在我确实在删除按钮附带的隐藏输入字段中有用户名,换句话说,我在该句中出现了一个名称,但问题是第一个人的同名当我点击用户列表上的任何一个删除按钮时,列表就会显示出来。因此,为了澄清虽然删除发生在正确的用户,因此它删除了我想要删除的用户,确认警告中的名称始终显示第一个用户的名称。

我认为这是我编写jquery代码的方式存在问题,所以对此的任何帮助都将非常感激,我已经在这一段时间内试图在网上寻找答案。

简而言之,总结一下: 我在页面上有几个“表单”(意思是“删除”按钮,导致“表单”包含我们想要删除的用户的隐藏输入信息,被发送到后端以便后端知道要删除哪个用户。)

删除功能正常 - 删除所需的用户。

然而,警报功能没有向管理员填充所需的消息,因为消息的用户名不会因用户而改变,并且它始终抓取用户列表中第一个用户的名称。 / p>

以下是用户列表的代码:

<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的正确方法,以便能够在消息中获得当前单击的“删除”按钮的隐藏输入名称值,那将是非常棒的!

提前感谢您的帮助!

2 个答案:

答案 0 :(得分: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()将仅返回集合中第一个元素的值,因此您看到的行为

这是来自jquery code

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

    if ( !arguments.length ) {
        if ( elem ) {
    ...........

答案 1 :(得分: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! :)