标题是不言自明的,我尝试使用.checked(以及其他一些也失败的方法),但它没有用。
我想知道如何,所以我可以计算一个测验的分数。
以下是它的html部分:
<html>
<head lang=pt>
<meta charset="utf-8">
<title>Formulario</title>
<link rel="stylesheet" type="text/css" href="quiz1.css">
<script src=quiz.js></script>
</head>
<body>
<form class=formulario onsubmit="return mostrar_placar()">
<h3 id = "pergunta">Qual é o nome do inventor da linguagem de programação Python?<br></h3>
<input class = "escolhas" id ="0" type="button" value="Guido van Rossum" onclick="keep_highlighted('0')"><br>
<input class = "escolhas" id ="1" type="button" value="Dennis Ritchie" onclick="return keep_highlighted('1')"><br>
<input class = "escolhas" id ="2" type="button" value="James Gosling" onclick="return keep_highlighted('2')"><br>
<input class = "escolhas" id ="3" type="button" value="Brendan Eich" onclick="return keep_highlighted('3')"><br>
<h3 id = "pergunta">Dentre as alternativas a seguir, qual não é um item de hardware?<br></h3>
<input class = "escolhas" id ="4" type="button" value="Mouse" onclick="return keep_highlighted('4')"><br>
<input class = "escolhas" id ="5" type="button" value="Processador" onclick="return keep_highlighted('5')"><br>
<input class = "escolhas" id ="6" type="button" value="Chipset" onclick="return keep_highlighted('6')"><br>
<input class = "escolhas" id ="7" type="button" value="Debian" onclick="return keep_highlighted('7')"><br><br>
<input type="submit" value="confirmar">
</form>
</body>
</html>
这是js:
var certos = ["0", "7"];
function keep_highlighted(id) {
document.getElementById(id).style.background = "white";
document.getElementById(id).style.color = "black";
}
function placar() {
var placar = 0;
for (var i = 0; i < 8; i++) {
console.log(document.getElementById(i.toString()).checked);
if (document.getElementById(i.toString()).checked) {
if (document.getElementById(i.toString()).value == certos[i]) {
placar += 1;
}
}
}
return placar;
}
function mostrar_placar() {
alert("Seu placar é " + placar());
}
控制台只打印8个傻瓜,无论我点击什么(显示它从未检查过)。所以它永远不会进入计算分数的条件(没有if(document.getElementById(i.toString())。checked)它总是在分数上显示2,因为它循环遍历所有按钮,甚至是未选中的按钮)。并且总是将分数显示为0 ....有人可以帮忙吗?
答案 0 :(得分:0)
“啊,我怎么看它是否突出显示......”
您似乎想知道该按钮是否突出显示,这基本上就是说它是“活动”或具有焦点的元素。您可以通过document.activeElement
。
这是一个演示,显示主体点击的活动元素变化。
document.body.onclick = function() {
console.log(document.activeElement);
};
html, body { height: 100%; }
<button>button</button>
<input placeholder="click in here">
但是,您询问的是您的解决方案,而不是完全解释问题。我不知道这与得分测验有什么关系,所以可能你需要一些非常不同的东西。
答案 1 :(得分:0)
无法检查输入按钮&#34;在自身。您有几个选项可以解决这个问题。您可以使用单选按钮或复选框按钮将元素更改为表单。但是,如果你想保留按钮,你也可以在单击按钮时使用javascript keep_highlighted方法执行某些操作,例如:
if (document.getElementById(id).classList.contains("checked")) {
document.getElementById(id).classList.remove("checked");
} else {
document.getElementById(id).classList.add("checked");
}
你可以得到这个&#34;检查&#34;按钮使用:
document.getElementsByClassName("checked");
这将切换&#34;已检查&#34;元素上的类,您可以在其中获取javascript中其他位置的列表,例如您的提交按钮指向的位置
编辑:此外,您可以将按钮样式移动到这些块中,以便您可以切换&#34;切换&#34;按钮被突出显示或不基于点击它们,用户也可以取消选中&#34;选择。
答案 2 :(得分:0)
按钮不应用于表示答案,除非它们是一组选择的一部分。然后,您必须决定是否只允许选择组中的一个项目或是否允许多个项目。这正是复选框和单选按钮的用途。
现在,您不必显示用户复选框或单选按钮 - 您可以向他们显示类似于SELECT R.AcctNbr, X.EffDate, X.IntRate, X.InactiveDate, X.DateLastMaint
FROM AcctRateHist X, Rpt_Sort_Process R
WHERE X.AcctNbr = R.AcctNbr -- Just some stuff thats needed to get the AcctNbr: Ignore
AND R.QueNbr = somenum -- Just some stuff thats needed to get the AcctNbr: Ignore
AND R.ApplNbr = somenum -- Just some stuff thats needed to get the AcctNbr: Ignore
AND R.QueSubNbr = somenum -- Just some stuff thats needed to get the AcctNbr: Ignore
AND X.EffDate = (SELECT EffDate -- This gets the EffDate of 9/14/2017
FROM (SELECT *
FROM AcctRateHist X
WHERE X.AcctNbr = A.AcctNbr -- R.Acctnbr
AND X.EffDate <= TO_DATE('09-26-2017', 'MM-DD-YYYY') -- The date to get the most recent value for
ORDER BY X.EffDate DESC, X.DateLastMaint DESC)
WHERE ROWNUM = 1)
AND ROWNUM = 1 -- This SHOULD return the IntRate of null, but doesn't
ORDER BY X.EffDate DESC, X.Datelastmaint DESC;
的内容,但“按钮”需要表现出来或者像复选框或单选按钮。这可以通过实际使用复选框或单选按钮来实现,但隐藏这些,而是显示与隐藏项绑定的button
元素。
然后,在您的JavaScript中,您可以像往常一样访问实际的复选框和单选按钮。
以下是使用隐藏复选框的示例,以便可以选择多个“按钮”元素:
label
document.getElementById("getChecked").addEventListener("click", function(){
// Gather up all the checked checkboxes into an Array;
var checkedCheckboxes =
Array.prototype.slice.call(document.querySelectorAll("input[type='checkbox']:checked"));
// Set up result array
var result = [];
// Loop over them and add selected values to array
checkedCheckboxes.forEach(function(checkbox){
result.push(checkbox.value);
});
// Clear old output and log new results
console.clear();
console.log(result);
});
/* Hide the checkboxes */
input[type='checkbox'] { display:none; }
/* Default styling for labels to make them look like buttons */
input[type='checkbox'] + label {
display:inline-block;
box-shadow:1px 1px grey;
border-radius:3px;
background-color:#e0e0e0;
padding:5px;
font-family:Arial, Helvetica, sans-serif;
cursor:pointer;
}
/* Styling for labels when corresponding checkbox is checked */
input[type='checkbox']:checked + label {
box-shadow:-1px -1px grey;
background-color:#f78d32;
}
使用单选按钮,只能选择一个“按钮”,几乎完全相同,但HTML使用<input type="checkbox" id="chk1" name="chk1" value="choice 1">
<label for="chk1">Choice 1</label>
<input type="checkbox" id="chk2" name="chk2" value="choice 2">
<label for="chk2">Choice 2</label>
<input type="checkbox" id="chk3" name="chk3" value="choice 3">
<label for="chk3">Choice 3</label>
<p><button id="getChecked">Get the checked checkbox values</button></p>
并且CSS和JavaScript选择器更改为查找这些单选按钮。此外,由于只能选择一个单选按钮(在任何给定的组内),因此无需将所有已检查的单选按钮(从一个组)收集到一个数组中。只有一个选中的按钮。
input type=radio
document.getElementById("getChecked").addEventListener("click", function(){
// Get the one radio button (within its group) that is checked:
var checkedRadio = document.querySelector("input[type='radio'][name='rad']:checked");
// Clear old output and log new results
console.clear();
console.log(checkedRadio.value);
});
/* Hide the checkboxes */
input[type='radio'] { display:none; }
/* Default styling for labels to make them look like buttons */
input[type='radio'] + label {
display:inline-block;
box-shadow:1px 1px grey;
background-color:#e0e0e0;
padding:5px;
border-radius:3px;
font-family:Arial, Helvetica, sans-serif;
cursor:pointer;
}
/* Styling for labels when corresponding radio button is checked */
input[type='radio']:checked + label {
box-shadow:-1px -1px grey;
background-color:#f78d32;
}
答案 3 :(得分:0)
document.getElementById(id).setAttribute("checked","");
document.getElementById(id).removeAttribute("checked");
答案 4 :(得分:-1)
您希望为每个按钮设置“已选中”或“已点击”或“突出显示”等属性。然后单击该按钮时,将其设置为true。然后检查哪些已被点击,循环这些按钮并检查'clicked'是真还是假。
let buttons = document.querySelectorAll('input[type="button"]');
let buttonData = Array.from(buttons).map((el, i) => {
el.addEventListener('click', ()=>{
const clicked = !buttonData[i].clicked;
buttonData[i].clicked = clicked;
if(clicked){
el.classList.add('highlighted');
} else {
el.classList.remove('highlighted');
}
});
return {element: el, clicked:false}
});
buttonData.forEach((btn, i) => {
});
document.getElementById('check-buttons').addEventListener('click', ()=>{
buttonData.forEach((btn, i) => {
console.log("button:", btn.element.id, "is highlighted?", btn.clicked);
});
});
input[type="button"] {
min-width: 100px;
display: block;
}
.highlighted {
background-color: white;
outline: 2px solid rgba(230,200,100);
}
<input type="button" id="button0" value="button 0">
<input type="button" id="button1" value="button 1">
<input type="button" id="button2" value="button 2">
<input type="button" id="button3" value="button 3">
<br>
<button id="check-buttons"> which buttons are highlighted ?</button>