e.target 方法判断多个radio 是否选择

本文详细介绍了如何使用HTML、CSS和JavaScript实现一个自定义表单,包括性别和选项的交互逻辑,以及如何通过事件监听来控制隐藏字段的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>12313</title>
</head>
<body>
<form action="" method="" id="form1">
    <p>
        <input type="radio" value="1" name="man"/><input type="radio" value="2" name="man" /><input type="radio" value="3" name="man" />
        <input type="hidden" value="false" id="hidden0"/>
    </p>
    <p>
        <input type="radio" value="1" name="sex"/><input type="radio" value="2" name="sex" /><input type="radio" value="3" name="sex" />
        <input type="hidden" value="false" id="hidden1"/>
    </p>
    <input type="submit" id="submit"/>
</form>
 
<script type="text/javascript">
window.onload = function(){
    var oForm = getId("form1");
    var hidden0 = getId("hidden0");
    var hidden1 = getId("hidden1");
    var submit = getId("submit");
    oForm.onclick = function(e){
        if(e){
            switch(e.target.name){
                case "man":
                    hidden0.value = "true";
                    break;
                case "sex":
                    hidden1.value = "true";
                    break;
            }
            e.stopPropagation();
        }else{
            switch(event.srcElement.name){
                case "man":
                    hidden0.value = "true";
                    break;
                case "sex":
                    hidden1.value = "true";
                    break;
            }
            event.cancelBubble = true;
        }
    }
    submit.onclick = function(e){
        var oEvent = e || event;
        if(hidden0.value != "true" && hidden1.value != "true"){
            alert("未选择");
            if(oEvent.preventDefault){
                oEvent.preventDefault();
            }else{
                oEvent.returnValue = false;
            }
        }else{
            alert("已经选择");
        }
        if(oEvent.stopPropagation){
            oEvent.stopPropagation();

        }else{
            oEvent.cancelBubble = true;
        }

    }
    document.onclick = function(){
        alert("b")
    }

}
function getId(id){
    return document.getElementById(id);
}
</script>
</body>
</html>

转载于:https://www.cnblogs.com/xiuciedward/p/3186163.html

要求每句添加注释 var left, right, bottom, prev, radioTit, contentList; var questionList = [], option = '', timer = null; init() function init() { left = document.querySelector('.left'); right = document.querySelector('.right'); bottom = document.querySelector('.bottom'); radioTit = document.querySelector('.radio-tit'); contentList = document.querySelector('.content-list'); questionList = localStorage.questionList ? JSON.parse(localStorage.questionList) : []; right.addEventListener('click', rightClickHandler); radioTit.addEventListener('click', titClickHandler); contentList.addEventListener('click', listClickHandler); contentList.addEventListener('input', inputHandler); render(); } function rightClickHandler(e) { if (!/li/i.test(e.target.nodeName)) return; if (prev) prev.style.display = 'none' const option = e.target.className.match(/\w+(?=-)/)[0]; prev = document.querySelector('.' + option); prev.style.display = 'block'; } function titClickHandler(e) { if (!/button/i.test(e.target.nodeName)) return; if (e.target.className === 'add') { questionList.push({ question: '', options: ['', '', '', ''], result: '' }) localStorage.questionList = JSON.stringify(questionList); render(); } else { questionList.length = 0; localStorage.questionList = JSON.stringify(questionList); render(); document.querySelector('.radio').style.display = 'none' } } function listClickHandler(e) { if (!e.target.classList.contains('btn')) return const id = e.target.getAttribute('data'); if (e.target.classList.contains('content-delete')) { questionList.splice(id, 1); localStorage.questionList = JSON.stringify(questionList); render(); } else if (e.target.classList.contains('select')) { if (e.target.innerHTML === '选择') { const result = e.target.getAttribute('name'); questionList[id].result = result; } else { questionList[id].result = ''; } localStorage.questionList = JSON.stringify(questionList); render() } else if (e.target.classList.contains('option-add')) { questionList[id].options.push(''); localStorage.questionList = JSON.stringify(questionList); render(); } else if (e.target.classList.contains('option-delete')) { if (questionList[id].options.length <= 4) { alert('至少保留4个选项') } else { questionList[id].options.pop() localStorage.questionList = JSON.stringify(questionList); render(0) } } } function inputHandler(e) { if (timer) clearTimeout(timer); timer = setTimeout(() => { timer = null; const name = e.target.getAttribute('name'), id = e.target.getAttribute('data'); if (name === 'question') { questionList[id].question = e.target.value; } else { idx = e.target.getAttribute('name') - 1; questionList[id].options[idx] = e.target.value; } localStorage.questionList = JSON.stringify(questionList); }, 500) } function render() { contentList.innerHTML = questionList.map((item, index) => { return `<li> <div class="content-tit">单选题${index + 1}: <div class="content-delete btn" data="${index}">删除</div> </div> <div class="content-question"> <div class="question"> <label for="question">题目 :</label> <input name="question" type="text" value="${item.question}" data=${index}> </div>`+ item.options.map((it, idx) => { return `<div> <label for="${idx + 1}">${option = String.fromCharCode(idx + 65)}:</label> <input name="${idx + 1}" type="text" value="${it}" data=${index}> <div class="select btn" data="${index}" name="${option}">${item.result === option ? '√' : '选择'}</div> ${idx === item.options.length - 1 ? '<div class="option-add btn" data="' + index + '">添加</div><div class="option-delete btn" data="' + index + '">删除</div>' : ''} </div>` }).join('') + `</div></li>` }).join('') }
08-03
将一下代码替换成简单一点的 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } ul { list-style: none; } a { text-decoration: none; color: black; } .box { width: 1200px; height: 900px; margin: 8px; border-collapse: collapse; } .box>.left { float: left; width: 878px; height: 758px; padding: 20px; border: 1px solid #ccc; } .left>div { width: 100%; height: 100%; display: none; } .radio>.radio-tit { width: 98%; height: 50%; background: linear-gradient(to bottom, #ffffff 0, #ededed 100%); } </style> </head> <body> <div class="box"> <div class="left"> <div class="radio"> <div class="radio-tit line"> <span>单选题</span> <button class="delete">删除</button> <button class="add">添加</button> </div> <div class="radio-content"> <ul class="content-list"> </ul> </div> </div> </div> <div class="right"> <div class="right-tit line"> 栏目 </div> <div class="right-content"> <ul> <li class="radio-option">单选题</li> </ul> </div> </div> <div class="bottom"> <div class="submit">提交</div> <div class="reset">重新编辑</div> </div> </div> <script> // 定义全局变量 var left, right, bottom, prev, radioTit, contentList; var questionList = [], // 存储题目列表 option = '', // 临时存储选项字母 timer = null; // 防抖定时器 // 初始化函数 init() function init() { // 获取DOM元素 left = document.querySelector('.left'); // 左侧区域 right = document.querySelector('.right'); // 右侧区域 bottom = document.querySelector('.bottom'); // 底部区域 radioTit = document.querySelector('.radio-tit'); // 标题区域 contentList = document.querySelector('.content-list'); // 题目列表容器 // 从localStorage加载题目数据 questionList = localStorage.questionList ? JSON.parse(localStorage.questionList) : []; // 添加事件监听器 right.addEventListener('click', rightClickHandler); // 右侧区域点击 radioTit.addEventListener('click', titClickHandler); // 标题区域点击 contentList.addEventListener('click', listClickHandler); // 题目列表点击 contentList.addEventListener('input', inputHandler); // 题目列表输入 render(); // 渲染题目列表 } // 右侧区域点击处理 function rightClickHandler(e) { // 只处理li元素的点击 if (!/li/i.test(e.target.nodeName)) return; // 隐藏之前显示的面板 if (prev) prev.style.display = 'none'; // 获取点击元素的类名(去掉后缀) const option = e.target.className.match(/\w+(?=-)/)[0]; // 显示对应面板 prev = document.querySelector('.' + option); prev.style.display = 'block'; } // 标题区域点击处理 function titClickHandler(e) { // 只处理button元素的点击 if (!/button/i.test(e.target.nodeName)) return; // 添加按钮处理 if (e.target.className === 'add') { // 添加新题目到列表 questionList.push({ question: '', // 题目内容 options: ['', '', '', ''], // 选项(初始4个空选项) result: '' // 正确答案 }); // 保存到localStorage localStorage.questionList = JSON.stringify(questionList); render(); // 重新渲染 } // 清空按钮处理 else { questionList.length = 0; // 清空题目列表 localStorage.questionList = JSON.stringify(questionList); // 更新存储 render(); // 重新渲染 document.querySelector('.radio').style.display = 'none'; // 隐藏面板 } } // 题目列表点击处理 function listClickHandler(e) { // 只处理带有btn类的元素 if (!e.target.classList.contains('btn')) return; // 获取题目索引 const id = e.target.getAttribute('data'); // 删除题目按钮 if (e.target.classList.contains('content-delete')) { questionList.splice(id, 1); // 从数组中删除题目 localStorage.questionList = JSON.stringify(questionList); // 更新存储 render(); // 重新渲染 } // 选择答案按钮 else if (e.target.classList.contains('select')) { // 当前是"选择"状态 if (e.target.innerHTML === '选择') { const result = e.target.getAttribute('name'); // 获取选项字母 questionList[id].result = result; // 设置为正确答案 } // 当前是"√"状态(已选中) else { questionList[id].result = ''; // 清除正确答案 } localStorage.questionList = JSON.stringify(questionList); // 更新存储 render(); // 重新渲染 } // 添加选项按钮 else if (e.target.classList.contains('option-add')) { questionList[id].options.push(''); // 添加空选项 localStorage.questionList = JSON.stringify(questionList); // 更新存储 render(); // 重新渲染 } // 删除选项按钮 else if (e.target.classList.contains('option-delete')) { // 至少保留4个选项 if (questionList[id].options.length <= 4) { alert('至少保留4个选项'); } else { questionList[id].options.pop(); // 删除最后一个选项 localStorage.questionList = JSON.stringify(questionList); // 更新存储 render(); // 重新渲染 } } } // 输入处理(带防抖) function inputHandler(e) { // 清除之前的定时器 if (timer) clearTimeout(timer); // 设置新的定时器(500ms防抖) timer = setTimeout(() => { timer = null; const name = e.target.getAttribute('name'); // 输入项名称 const id = e.target.getAttribute('data'); // 题目索引 // 题目输入框 if (name === 'question') { questionList[id].question = e.target.value; // 更新题目内容 } // 选项输入框 else { const idx = e.target.getAttribute('name') - 1; // 选项索引 questionList[id].options[idx] = e.target.value; // 更新选项内容 } // 保存到localStorage localStorage.questionList = JSON.stringify(questionList); }, 500); } // 渲染题目列表 function render() { // 生成题目列表HTML contentList.innerHTML = questionList.map((item, index) => { return `<li> <div class="content-tit">单选题${index + 1}: <div class="content-delete btn" data="${index}">删除</div> </div> <div class="content-question"> <div class="question"> <label for="question">题目 :</label> <input name="question" type="text" value="${item.question}" data=${index}> </div>` + // 生成选项HTML item.options.map((it, idx) => { option = String.fromCharCode(idx + 65); // 生成选项字母(A,B,C...) return `<div> <label for="${idx + 1}">${option}:</label> <input name="${idx + 1}" type="text" value="${it}" data=${index}> <div class="select btn" data="${index}" name="${option}">${item.result === option ? '√' : '选择'}</div> ${idx === item.options.length - 1 ? `<div class="option-add btn" data="${index}">添加</div> <div class="option-delete btn" data="${index}">删除</div>` : ''} </div>`; }).join('') + `</div></li>`; }).join(''); } </script> </body> </html>
最新发布
08-03
// 定义变量 var times, num, score, content, mainQuestion, submit, mask; // 存储用户答案的对象 var answerList = {}; // 初始化函数 init(); // 创建函数 function init() { // 获取所有的计时器 times = document.querySelectorAll('.time'); // 为每个计时器设置120的倒计时 times.forEach((item) => getTime(120, item)); // 设置分数显示 setScore(); // 设置右侧题目导航 setRightContent(); //创建题目内容 createQuestion(); //绑定提交事件 submitAnswer(); } // 设置分数信息 function setScore() { // 获取题目数量和分数显示元素 num = document.querySelector('.num'); score = document.querySelector('.main-sorce'); // 显示总题目数 num.innerHTML = `共${questionList.length}题`; // 计算总分 var s = questionList.reduce((value, item) => value + item.score, 0); // 显示总分信息 score.innerHTML = `共${questionList.length}题,合计${s}分`; } // 创建右侧题目导航 function setRightContent() { // 获取导航容器 content = document.querySelector('.content'); // 生成题目导航链接 content.innerHTML = questionList.map((item, index) => { // 为每个题目创建带锚点的链接 return `<li><a href='${index}'>${index + 1}</a></li>`; }).join(''); } // 创建题目内容 function createQuestion() { // 获取题目容器 mainQuestion = document.querySelector('.main-question'); // 绑定题目点击事件委托 mainQuestion.addEventListener('click', questionHandler); // 生成所有题目渲染 mainQuestion.innerHTML = questionList .map((item, index) => { return ` <li class="clear" id='${index}'> <div class="left"><span>${index + 1}</span></div> <div class="question"> <div>${item.question}</div> <div class="line"></div> <ul> ${item.options .map((t, ind) => { // 生成选项(A/B/C/D) const optionChar = String.fromCharCode(65 + ind); return `<li> <input type="radio" name="${index}" data='${optionChar}'/> ${optionChar + "." + t} </li>`; }) .join("")} </ul> </div> </li> `; }) .join(""); } // 处理题目选择 function questionHandler(e) { // 只处理input元素的点击 if (e.target.ondeName !== 'INPUT') return // 获取题目索引 const name = e.target.name; // 获取选项值 const data = e.target.getAttribute('data'); // 存储答案 answerList[name] = data; } //提交功能初始化 function submitAnswer() { //获取提交按钮和遮罩层 submit = document.querySelector('.submit'); mask = document.querySelector('.mask'); // 绑定提交事件 submit.addEventListener('click', clickHandler); // 绑定遮罩层点击事件 mask.addEventListener('click', maskHiddenHandler); } // 提交按钮点击处理 function clickHandler(e) { // 显示分数面板 mask.style.dispaly = 'block'; document.querySelector(".score-panel").innerHTML = ` 您一共得了${Object.keys(answerList).reduce((value, key) => { if (questionList[Number(key)].result === answerList[key]) value += questionList[Number(key)].score; return value; }, 0)}分 `; } function maskHiddenHandler(e) { // 关闭分数面板 mask.style.display = 'none'; }
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值