这是我想要做的:我有一个表单,上面有一个复选框。选中该复选框时,我希望显示一些其他字段,未选中时我希望不显示这些字段。同样在提交表单后出现某种错误(例如该人尚未确认他们不是机器人)我希望复选框保持选中状态,如果它之前被选中(当然,附加字段仍然是显示是否选中)。
我尝试了几种不同的方法:
使用数据切换
在复选框的单击功能上使用 JavaScript
使用 jQuery 道具方法
使用 jQuery :checked 选择器
(参考 3. 和 4. https://www.tutorialrepublic.com/faq/how-to-check-a-checkbox-is-checked-or-not-using-jquery.php)
所有方法出现的一个问题是,在提交有错误的表单后,即使选中了复选框,也不会显示其他字段。
<div class="form-group">
<label for="additionalFields" class="checkbox-inline ml-1 mb-0">Show additonal fields</label>
<input class="align-middle" type="checkbox" name="additionalFields" value="additionalFields" data-toggle="collapse" data-target="#fields" <?php if (isset($_POST['additonalFields'])) echo 'checked="checked"'; ?>>
</div>
<div class="form-group collapse in row" id="fields">
<div class="col-sm-6">
<label class="form-control-label ml-1 mb-xs-form" for="fieldOne">Field 1:</label>
<input class="form-control" type="text" id="fieldOne" name="fieldOne" maxlength="100" placeholder="Field 1"
<?php
if ($_POST && ($suspect || $errors || !($response->success))) {
echo 'value="' . htmlentities($fieldOne) . '"';
}
?>>
</div>
<div class="col-sm-6">
<label class="form-control-label ml-1 mt-3 mt-sm-0" for="fieldTwo">Field 2</label>
<input class="form-control" type="text" id="fieldTwo" name="fieldTwo" maxlength="100" placeholder="Field 2"
<?php
if ($_POST && ($suspect || $errors || !($response->success))) {
echo 'value="' . htmlentities($fieldTwo) . '"';
}
?>>
</div>
</div><!-- form-group -->
上面的代码使用了数据切换。使用 JavaScript 或 jQuery 时,我使用的是 display: none; 并显示:flex;显示和隐藏附加字段。
手掌心
一只甜甜圈