求助:使用JavaScript实现下拉选择框的显示与隐藏
勾选复选框控制下拉框显示/隐藏失效的修复方案
你的代码无法生效主要有三个核心问题,以下是具体排查和修复步骤:
1. 必须引入jQuery库
你写的JS代码用了jQuery的$语法,但HTML里没有引入jQuery框架,这是导致脚本完全不运行的关键。需要在自定义脚本之前引入jQuery,比如用CDN链接:
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <script src="{% static 'website/js/bkingscpt.js' %}"></script>
如果是本地项目,也可以替换成你本地存放的jQuery文件路径。
2. 修复HTML语法错误
你的HTML存在几处语法问题,会导致浏览器解析DOM异常:
- 第一个标签写法错误:
<div h2 class="display-6 text-uppercase mb-3">应该调整为<h2 class="display-6 text-uppercase mb-3">(或者包裹在div里:<div><h2>...</h2></div>) - 多个复选框标签未闭合:
window_cleaning、power_wash、curb_address这三个<input>标签都缺少闭合的/>,比如修正后:
另外两个复选框也需要补上闭合标签。<input type="checkbox" id="window_cleaning" name="window_cleaning" value="window_cleaning"/>
3. 优化JS代码(更简洁高效)
原代码逻辑没问题,但可以简化写法,而且建议直接隐藏整个下拉容器(而非仅隐藏select),逻辑更合理:
// 初始状态隐藏下拉容器 $('#dropdownHolder').hide(); // 监听复选框状态变化,切换容器显示/隐藏 $('#car_wash').on('change', function() { $('#dropdownHolder').toggle(this.checked); });
toggle()方法会根据传入的布尔值(这里是复选框的checked状态)自动切换元素的显示/隐藏,比if-else写法更简洁。
修复后的完整代码示例
HTML代码
<div> <h2 class="display-6 text-uppercase mb-3">Service</h2> <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <script src="{% static 'website/js/bkingscpt.js' %}"></script> <span class="question">Select Service(s):</span><br> <input type="checkbox" id="car_wash" name="car_wash" value="car_wash"/> <label for="car_wash"> Car Wash</label><br> <input type="checkbox" id="window_cleaning" name="window_cleaning" value="window_cleaning"/> <label for="window_cleaning"> Window Cleaning</label><br> <input type="checkbox" id="power_wash" name="power_wash" value="Power Wash"/> <label for="power_wash"> Powerwashing</label><br> <input type="checkbox" id="curb_address" name="curb_address" value="curb_address"/> <label for="curb_address"> Curb Address Painting</label><br> </div> <div id="dropdownHolder" class="col-lg-12 mb-3"> <select id="carwash_type" name="carwash_type" class="form-select form-control" aria-label="Default select example"> <option selected> Car Wash Type</option> <option value="1">Express Interior</option> <option value="2">Express Exterior</option> <option value="3">Full Service Wash</option> </select> </div>
JavaScript代码
$('#dropdownHolder').hide(); $('#car_wash').on('change', function() { $('#dropdownHolder').toggle(this.checked); });
内容的提问来源于stack exchange,提问作者Stay6xy
相关产品推荐
相关产品推荐

