【问题标题】:Using isset from a name of an input使用输入名称中的 isset
【发布时间】:2015-09-11 16:06:52
【问题描述】:

我不确定我是否正确地处理了这个问题。我有一组复选框输入。如果有人选中最后一个复选框all_users_check,我希望出现一个新表单,我将在下拉列表中列出所有用户(尚未添加下拉列表)。我以为我可以通过使用输入的名称来做到这一点,但显然我弄错了,因为我收到了这个错误..

如果有人选中该选项,我还能如何构建我正在做的事情,以便新表单显示?

<div class="user_dropdown">
<form action="">
  <input type="checkbox" name="spectator_check" value=""> Spectators<br>
  <input type="checkbox" name="member_check" value="" checked> Team Members<br>
  <input type="checkbox" name="commissioner_check" value="" checked> Commissioner(s)<br>
   <label for="all_users_check">
  <input type="checkbox" name="all_users_check" value="" checked> Individual User<br>
  </label>
</form>
</div>

<script>
$(".user_dropdown").hide();
$(".all_users_check").click(function() {
    if($(this).is(":checked")) {
        $(".user_dropdown").show();
    } else {
        $(".user_dropdown").hide();
    }
});
</script>

这是页面加载时的样子。出于某种原因,这些字段已被检查。

【问题讨论】:

  • 不应该是isset($_GET['all_users_check']吗?你也没有提交按钮,你打算用 AJAX 处理吗?
  • 我还没有尝试提交任何内容。如果选中该复选框,我只想显示 isset 内部的内容。我不希望用户必须点击提交按钮才能显示未来的下拉框。 AJAX 是我只需单击复选框输入即可制作此节目的唯一方法吗?
  • PHP 是服务器端。页面加载后无法访问。将需要 AJAX 请求,或者您可以使用 JS/jquery 执行此操作。
  • 数据已经存在了。我只是想基本上隐藏它,直到用户单击该复选标记。除非这不能做到。我不想让用户点击提交按钮只是为了进入下一步。
  • 是的,所以需要 JS,而不是 PHP。 JS 在浏览器上运行,PHP 在服务器上运行。从这里开始,api.jquery.com/category/events/form-events

标签: javascript php jquery if-statement


【解决方案1】:

代码中的问题。

  1. .all_users_check 正在寻找课程。您的元素没有类,因此找不到。您可以使用不同的选择器来使用name 属性https://api.jquery.com/attribute-equals-selector/
  2. 这个$(".user_dropdown").hide(); 隐藏了你的整个表单。您可能想要移动您的 div,或者完全删除它。
  3. checked 属性检查它所在的字段。 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input

使用checked属性表示是否选中了该项

<div class="user_dropdown">
<form>
  <input type="checkbox" name="spectator_check" value=""> Spectators<br>
  <input type="checkbox" name="member_check" value=""> Team Members<br>
  <input type="checkbox" name="commissioner_check" value=""> Commissioner(s)<br>
   <label for="all_users_check">
  <input type="checkbox" name="all_users_check" value=""> Individual User<br>
  </label>
</form>
</div>

<script>
//$(".user_dropdown").hide();
$("input[name='all_users_check']").click(function() {
    if($(this).is(":checked")) {
        $(".user_dropdown").show();
    } else {
        $(".user_dropdown").hide();
    }
});
</script>

【讨论】:

  • 当通知出现时,我正准备用完全相同的解决方案点击提交!
  • @chris85 show hide 正在做我想做的事。我现在唯一担心的是,当我加载页面时,一些复选框字段已经被选中。我希望它在没有检查任何内容的地方加载。我在我的问题中放了一张图片来说明。
  • 您是否尝试过我发布的代码,或者更新您的代码以删除checked 属性?
  • 在我添加 jquery 之前发生了已检查输入的复选框问题。我希望该 div 一直隐藏,直到我单击复选框,所以我如何让它更好地工作。
  • 是的,我的评论和回答并不是指带有checked 属性的jquery。看看我的 HTML 和你的 &lt;input type="checkbox" name="commissioner_check" value="" checked&gt; Commissioner(s)&lt;br&gt; value="" **checked**.
【解决方案2】:

isset 是一种语言结构,除了链接到手册页上的此警告所指示的变量外,不能接受任何其他内容:

警告 isset() 仅适用于变量,因为传递任何其他内容都会导致解析错误。

您没有将变量传递给isset 函数,而是传递了一个常量值,基本上是一个带有单个字符串all_users_check 的数组。这 不是 变量,因为您没有将其分配给变量名。试试这个:

if(isset($_POST['all_users_check']))

这里传入的变量是superglobal$_POST,您正在检查索引all_users_check 是否设置在该数组内。

更新

要通过 javascript 检查输入是否为空,请查看this question

【讨论】:

    【解决方案3】:

    尝试使用此脚本,您已将复选框的状态设置为默认选中。

    <div class="user_dropdown">
    <form action="">
      <input type="checkbox" name="spectator_check" value=""> Spectators<br>
      <input type="checkbox" name="member_check" value=""> Team Members<br><!-- removed 'checked' from this line -->
      <input type="checkbox" name="commissioner_check" value=""> Commissioner(s)<br><!-- removed 'checked' from this line -->
       <label for="all_users_check">
      <input type="checkbox" name="all_users_check" value="" > Individual User<br> <!-- removed 'checked' from this line -->
      </label>
    </form>
    </div>
    
    <script>
    $(".user_dropdown").hide();
    $(".all_users_check").click(function() {
        if($(this).is(":checked")) {
            $(".user_dropdown").show();
        } else {
            $(".user_dropdown").hide();
        }
    });
    </script>
    

    对于再次显示隐藏部分的其他问题,请尝试单击 all_users_check 类是否可见。

    【讨论】:

    • 这不会引发任何错误并隐藏 isset 中的内容,但如果我检查 all_users_check 它不会做任何事情。
    • @Ralph,如果您点击了 all_user_check 并且没有进行任何表单提交,那么您找不到任何区别。我认为您期望基于复选框的选中状态的客户端解决方案。
    • @Ralph,检查上面的解决方案
    • 没有all_users_check类。
    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多