Laravel 5.5实现勾选复选框时显示文本输入框并入库
解决方案:复选框联动显示输入框(Laravel 5.5 + JS)
仅用Laravel Blade无法实现实时的勾选显示输入框效果,因为Blade是服务器端模板引擎,只能在页面加载时根据服务器数据渲染内容,没法响应客户端的实时操作(比如勾选复选框)。你之前的代码无效,是因为@if(isset($_POST['chequear_ente']))只会在表单提交后、页面重新加载时判断,而不是用户勾选时实时触发。
下面是可行的实现方案,结合前端JS处理实时显示,后端Laravel处理数据存储:
1. 前端Blade模板代码
给复选框和输入框添加ID,用原生JS控制显示/隐藏:
<label for="chequear_ente" class="radio-inline mx-2"> <input type="checkbox" name="chequear_ente" id="chequear_ente"> Ente </label> <!-- 默认隐藏输入框 --> <div id="ente-input-container" style="display: none; margin-top: 10px;"> <input type="text" name="ente" id="ente" placeholder="请输入内容"> </div> <script> // 获取元素 const checkbox = document.getElementById('chequear_ente'); const inputContainer = document.getElementById('ente-input-container'); const input = document.getElementById('ente'); // 监听复选框状态变化 checkbox.addEventListener('change', function() { if (this.checked) { inputContainer.style.display = 'block'; } else { inputContainer.style.display = 'none'; input.value = ''; // 取消勾选时清空输入框,避免提交无效内容 } }); </script>
2. 后端控制器处理存储
因为不需要传递复选框数据,控制器只需处理ente字段即可(根据业务需求设置验证规则):
public function store(Request $request) { // 验证规则:ente可选,若填写则不为空 $validated = $request->validate([ 'ente' => 'nullable|string|max:255', // 其他表单字段的验证规则... ]); // 存入数据库,示例: YourModel::create([ 'ente' => $request->ente, // 其他字段... ]); return redirect()->back()->with('success', '数据保存成功'); }
补充说明
如果需要在表单提交后(比如验证失败回显)保持输入框的显示状态,可以在Blade里结合旧数据判断:
<div id="ente-input-container" style="display: {{ old('ente') ? 'block' : 'none' }}; margin-top: 10px;"> <input type="text" name="ente" id="ente" placeholder="请输入内容" value="{{ old('ente') }}"> </div> <script> // 页面加载时同步复选框状态 document.getElementById('chequear_ente').checked = {{ old('ente') ? 'true' : 'false' }}; </script>
内容的提问来源于stack exchange,提问作者Miguel David
相关产品推荐
相关产品推荐

