You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据Checkbox值实现HTML字段的显示与隐藏?

实现Checkbox切换视频上传/链接输入的交互方案

首先需要给两个内容区域添加标识类,方便控制显示隐藏,同时默认隐藏链接输入区域:

<!-- 视频上传区域:添加类video-upload-section -->
<div class="row video-upload-section">
    <!-- 原上传代码内容 -->
</div>

<!-- 视频链接输入区域:添加类video-link-section,默认隐藏 -->
<div class="row mb-3 video-link-section" style="display: none;">
    <!-- 原链接输入代码内容 -->
</div>

<!-- 给Checkbox添加ID,方便获取元素 -->
<div class="row mb-3">
    <label class="control-label">Link video</label>
    <input type="checkbox" name="link_video" id="linkVideoCheckbox" value="0" class="switch checkbox-action" />
</div>

下面提供三种常用实现方式,选适合你项目的即可:

1. 原生JavaScript实现

直接监听Checkbox的change事件,切换两个区域的显示状态,同时同步Checkbox的值:

// 获取元素
const checkbox = document.getElementById('linkVideoCheckbox');
const uploadSection = document.querySelector('.video-upload-section');
const linkSection = document.querySelector('.video-link-section');

// 监听切换事件
checkbox.addEventListener('change', function() {
    if (this.checked) {
        uploadSection.style.display = 'none';
        linkSection.style.display = 'block';
        this.value = '1'; // 勾选时设置值为1
    } else {
        uploadSection.style.display = 'block';
        linkSection.style.display = 'none';
        this.value = '0'; // 取消勾选时设置值为0
    }
});

// 页面加载时初始化状态(如果是编辑页面,需要根据已有数据设置)
window.addEventListener('DOMContentLoaded', function() {
    if (checkbox.checked) {
        uploadSection.style.display = 'none';
        linkSection.style.display = 'block';
    }
});

2. jQuery实现(项目已引入jQuery时用)

利用jQuery的toggle方法快速切换显示状态:

$('#linkVideoCheckbox').on('change', function() {
    const isChecked = $(this).is(':checked');
    // 切换区域显示:上传区域在未勾选时显示,链接区域在勾选时显示
    $('.video-upload-section').toggle(!isChecked);
    $('.video-link-section').toggle(isChecked);
    // 同步Checkbox的值
    $(this).val(isChecked ? '1' : '0');
});

// 初始化状态
$(document).ready(function() {
    if ($('#linkVideoCheckbox').is(':checked')) {
        $('.video-upload-section').hide();
        $('.video-link-section').show();
    }
});

3. Vue.js实现(项目用Vue框架时优先推荐)

因为你的代码里出现了<input-dropzone>这类Vue组件,用Vue的响应式绑定最方便:

第一步:在Vue实例中定义响应式数据

new Vue({
    el: '#your-app-container', // 替换成你的Vue挂载容器
    data() {
        return {
            linkVideo: false // 默认未勾选,对应显示上传区域
        }
    },
    mounted() {
        // 如果是编辑页面,从后端数据初始化状态
        // 比如:this.linkVideo = {{ $a->link_video == 1 ? 'true' : 'false' }};
    }
});

第二步:修改HTML模板,用v-show控制显示

<!-- Checkbox绑定响应式数据 -->
<div class="row mb-3">
    <label class="control-label">Link video</label>
    <input type="checkbox" name="link_video" v-model="linkVideo" class="switch checkbox-action" />
    <!-- 若需要提交值为0/1,可改为::value="1" v-model="linkVideo" -->
</div>

<!-- 上传区域:未勾选时显示 -->
<div class="row" v-show="!linkVideo">
    <!-- 原上传代码内容 -->
</div>

<!-- 链接输入区域:勾选时显示 -->
<div class="row mb-3" v-show="linkVideo">
    <!-- 原链接输入代码内容 -->
</div>

Vue会自动根据linkVideo的布尔值切换两个区域的显示,不需要手动操作DOM,更符合Vue的开发规范。

内容的提问来源于stack exchange,提问作者Carlos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:48