
本文介绍如何使用 jquery 在 laravel 前端页面中,根据复选框(checkbox)的选中状态实时显示或隐藏关联的表单字段(如按钮文案、链接等),全程无需提交表单,提升用户体验与表单逻辑清晰度。
本文介绍如何使用 jquery 在 laravel 前端页面中,根据复选框(checkbox)的选中状态实时显示或隐藏关联的表单字段(如按钮文案、链接等),全程无需提交表单,提升用户体验与表单逻辑清晰度。
在 Laravel 表单开发中,常需实现「条件式表单字段」——例如仅当用户勾选“添加按钮”时,才显示按钮文案(button_attribute[tag])和链接(button_attribute[href])输入框。这类交互应即时响应、无需刷新或提交,核心在于前端 DOM 控制。
✅ 正确做法:按需控制目标字段容器
原问题中尝试用 $("form").show()/hide() 会错误地隐藏整个表单,导致所有字段不可见。实际需求是仅控制按钮相关字段的显隐。推荐将这些字段包裹在一个语义化容器(如 <div class="button-fields">)中,并通过 CSS 类(如 <code>d-none)配合 jQuery 切换:
<!-- 在表单内,复选框下方添加此容器 -->
<div class="form-group button-fields d-none">
<label>{{ __('landingPage.buttonTag') }}</label>
<input type="text" name="button_attribute[tag]" class="form-control" value="{{ old('button_attribute[tag]') }}">
</div>
<div class="form-group button-fields d-none">
<label>{{ __('landingPage.buttonLink') }}</label>
<input type="text" name="button_attribute[href]" class="form-control" value="{{ old('button_attribute[href]') }}">
</div>
✅ 对应 JavaScript(jQuery)逻辑
在 @section('script') 中更新脚本,精准控制 .button-fields 容器:
@section('script')
<script type="text/javascript">
$(document).ready(function() {
// 监听复选框状态变化(使用 change 事件更语义化,兼容键盘操作)
$('input[name="is_have_button"]').on('change', function() {
if ($(this).is(':checked')) {
$('.button-fields').removeClass('d-none').find('input').prop('required', true);
} else {
$('.button-fields').addClass('d-none').find('input').prop('required', false);
}
});
// 页面加载时同步初始状态(处理回填场景,如验证失败后重载)
if (!$('input[name="is_have_button"]').is(':checked')) {
$('.button-fields').addClass('d-none');
}
});
</script>
@endsection
? 关键优化说明
-
精准选择器:使用
input[name="is_have_button"]替代泛化的input[type="checkbox"],避免多复选框时误触发; -
事件选用
change:比click更可靠,覆盖鼠标点击、空格键切换等所有激活方式; -
表单验证同步:勾选时启用
required属性,取消时移除,确保后端验证逻辑与前端一致; -
初始状态兼容:页面加载时检查复选框默认值(如
old()回填),避免刷新后字段状态错乱; -
CSS 类驱动:依赖 Bootstrap 的
d-none(或自定义.hidden { display: none; }),语义清晰且易于维护。
⚠️ 注意事项
- 确保已正确引入 jQuery(Laravel Mix 默认包含)及 Bootstrap CSS;
- 若使用 Alpine.js 或 Livewire,建议改用其响应式语法替代 jQuery,以保持技术栈统一;
- 后端仍需做完整验证(如
required_if:is_have_button,1),前端控制仅为体验优化,不可替代服务端校验。
通过以上实现,用户勾选「是否添加按钮」后,按钮专属字段将平滑展开;取消勾选则自动收起,整个过程零延迟、无跳转,符合现代 Web 表单最佳实践。











