先看效果图:

代码如下:
<style>
/* 按钮样式 */
.option-group {margin:10px 0;}
.option-btn {
display:inline-block;
padding:6px 14px;
margin:4px;
border:1px solid #ccc;
border-radius:6px;
cursor:pointer;
background:#f7f7f7;
transition:all .2s;
}
.option-btn.active {
background:#007bff;
color:#fff;
border-color:#007bff;
}
.option-btn.disabled {
opacity:0.4;
pointer-events:none;
}
</style>
<div class="option-group" id="tech-group">
<strong>3D Technology:</strong><br>
<span class="option-btn" data-tech="SLA(Resin)">SLA(Resin)</span>
<span class="option-btn" data-tech="MJF(Nylon)">MJF(Nylon)</span>
<span class="option-btn" data-tech="SLM(Metal)">SLM(Metal)</span>
<span class="option-btn" data-tech="FDM(Plastic)">FDM(Plastic)</span>
<span class="option-btn" data-tech="SLS(Nylon)">SLS(Nylon)</span>
<span class="option-btn" data-tech="WJP(Resin)">WJP(Resin)</span>
<span class="option-btn" data-tech="BJ(Metal)">BJ(Metal)</span>
</div>
<!-- 二级分类 -->
<div class="option-group" id="material-group">
<strong>Material:</strong><br>
<!-- 二级按钮通过JS控制显示 -->
</div>
<!-- 隐藏提交字段 -->
<input type="hidden" name="caizhi" id="caizhi">
<script>
const techGroup = document.getElementById("tech-group");
const materialGroup = document.getElementById("material-group");
const caizhiInput = document.getElementById("caizhi");
// 定义数据
const materials = {
"SLA(Resin)": ["9600 Resin","Black Resin","Imagine Black","8228 Resin","LEDO 6060 Resin","8001 Resin","CBY Resin","X Resin","JLC Black Resin","Grey Resin","JLC Temp Resin"],
"MJF(Nylon)": ["PA12-HP Nylon","PAC-HP Nylon","PA11-HP Nylon"],
"SLM(Metal)": ["316L","Titanium TC4"],
"FDM(Plastic)": ["ABS","PLA","ASA","PA12-CF"],
"SLS(Nylon)": ["3201PA-F Nylon","1172Pro Nylon","3301PA Nylon"],
"WJP(Resin)": ["Full Color Resin"],
"BJ(Metal)": ["BJ-316L"]
};
let selectedTech = "";
let selectedMaterial = "";
// 一级分类点击
techGroup.addEventListener("click", e=>{
if(e.target.classList.contains("option-btn")){
// 高亮
[...techGroup.querySelectorAll(".option-btn")].forEach(btn=>btn.classList.remove("active"));
e.target.classList.add("active");
selectedTech = e.target.dataset.tech;
selectedMaterial = "";
caizhiInput.value = "";
// 生成对应二级按钮
materialGroup.innerHTML = "<strong>Material:</strong><br>";
materials[selectedTech].forEach(m=>{
const span = document.createElement("span");
span.className = "option-btn";
span.textContent = m;
span.dataset.material = m;
materialGroup.appendChild(span);
});
}
});
// 二级分类点击
materialGroup.addEventListener("click", e=>{
if(e.target.classList.contains("option-btn")){
[...materialGroup.querySelectorAll(".option-btn")].forEach(btn=>btn.classList.remove("active"));
e.target.classList.add("active");
selectedMaterial = e.target.dataset.material;
if(selectedTech && selectedMaterial){
caizhiInput.value = selectedTech + "---" + selectedMaterial;
}
}
});
</script>我们的网站后台默认有一个留言的提醒数据:但是如果要有多个留言表单,那么我们自定义的留言表单却没有这个...
在之前的文章中,我们有讲过,如何使用扩展字段来此入HTML代码并添加预览功能。文章链接可查看:https://ww...
以下内容来源于PB交流QQ群。第一:NGINX配置。#拦截常见敏感后台路径访问(例如dede、admin、wp-login等),...
在外贸网站建设中,我们会遇到有客户说需要用户前端留言的时候可以上传自定义的文件或者图片等资料。那么这...