【问题标题】:After form submit show / hide div +input field based on checkbox?表单提交后基于复选框显示/隐藏div +输入字段?
【发布时间】:2018-07-15 20:56:04
【问题描述】:

显然我做错了什么。我有一个简单的表单,它用一堆选定的变量(输入字段值)重新加载页面。现在,我喜欢根据复选框隐藏和显示我的输入字段之一。这个输入字段在一个 span 元素中,所以我只是隐藏/显示 span 元素

我有这部分工作

 // Show/Hide div span
  $('#showDiv').click(function () {
    $("#element_span_with_input_field").toggle(this.checked);
     if (!$('#element_span_with_input_field').is(":visible")) {
         alert("empty input field");
        $('#inputfield').val('');
      }
 });

现在使用一个简单的 php $_REQUEST 我可以检查复选框是否已选中=已选中

<input <?php if (isset($_REQUEST['showDiv']) && ($_REQUEST['showDiv'] == '1')) echo 'checked="checked"'; ?> type="checkbox" value="1" name="showDiv" id="showDiv"  />Show Div

复选框有效。

现在我认为这应该可以将显示/隐藏 div 设置为就绪

if ($("#showDiv").val() == '1') {
    $('#element_span_with_input_field').show();
    //$('#element_span_with_input_field').css({ visibility: "visible"});//also tried
  } else {
    $('#element_span_with_input_field').hide();
 } 

我的问题:当我取消选中 showDiv 复选框时,当我提交表单时 div 变得可见(甚至没有设置 showDiv 变量??)

【问题讨论】:

  • 您是否在浏览器的控制台中看到任何错误?
  • 您想检查选中的属性...让我看看,那个 jquery 示例在哪里...试试if ($("#showDiv").is(':checked')) {。我对您的流程或表单提交的位置有点不清楚,但我认为这就是您想要的。
  • @IncredibleHat 取消选中并提交表单似乎是我的问题。 #element_span_with_input_field 仍然显示??
  • 当您使用“未选中”复选框提交时,它不会显示在 $_POST 或 $_REQUEST 超全局中。只有当它们被“检查”时,它们才会提交,并且使用您为它们设置的值。因此,如果您说您正在取消选中该框并提交表单......这意味着它不会有一个值,它不会存在,所以它认为该框应该是“开放且可见的”。如果我正确地阅读了您的流程。并且由于您有 if ($("#showDiv").val() == '1') { ...它始终在 html 中具有该值(这就是您检查 :checked 的原因)。
  • @IncredibleHat,嗯,你确实是对的,我。当复选框被选中时,它的值只有 1,实际上它不存在(我认为它等于 false/0)。那么我可以轻松解决这个问题吗??

标签: php jquery


【解决方案1】:

要在 DOM 就绪期间检查复选框是否已预先选中(基于您的 checked="checked" 属性的 PHP 设置),您将查找 is checked 设置:

$(document).ready(function() {
    if ($("#showDiv").is(':checked')) {
        $('#element_span_with_input_field').show();
    } else {
        $('#element_span_with_input_field').hide();
    }
});

正如您所说,您的其余代码应该可以运行。请记住,当未选中 checkbox 时,$_POST$_REQUEST 中将不会有变量名称。所以确实,如果它不存在(或者是empty),考虑它false

作为旁注,您可能需要稍微调整其他块:

$(document).ready(function() {
    $('#showDiv').click(function () {
        $("#element_span_with_input_field").toggle($(this).is(":checked")); // use jquery
        if (!$(this).is(":checked")) { // eval the checkbox state instead
            $('#inputfield').val('');
        }
    });
});

【讨论】:

  • Tx 确实简单的 .is(':checked')) 工作正常。明天将您的调整合并到我的实际代码中。我必须承认我只在 php 类中经常跳过“this”退出。
  • 在带有 jquery 的 javascript 中有几个“this”。这可能会令人困惑,但通常效果相同。如果我在 jquery 块或标准中,我只是尽量保持一致。有时“this”在回调函数中不起作用!所以你需要 $(this)
猜你喜欢
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 2013-08-03
  • 1970-01-01
  • 2013-08-02
相关资源
最近更新 更多