这里有一个小问题,我正在尝试执行一个巨大的计算,它将在一个值范围内随机确定一些东西。我希望用户自己确定这个范围,并让他选择是否要添加最大值或最小值。基本上,现在一切正常,但我试图在开头添加一个“if”语句来检查是否选中了复选框以便提示正确的问题。问题是,我现在正在编写它的方式使得无法读取程序:它什么都不做。显示的错误消息是:
未捕获的TypeError:无法读取null(...)的属性'checked'。
我尝试了一些东西,当我自己设置值时,它起作用,所以问题实际上是“if”语句。以下是我的全球变量和不起作用的部分:
var maxdesiredvalue, mindesiredvalue;
if (document.getElementById("min").checked == false) {
mindesiredvalue = 0.00
}
else {
mindesiredvalue = window.prompt("Valeur minimale désirée:");
mindesiredvalue = parseInt(mindesiredvalue)}
if (document.getElementById("max").checked == false) {
maxdesiredvalue = 9999999.99
}
else {
maxdesiredvalue = window.prompt("Valeur maximale désirée:");
maxdesiredvalue = parseInt(maxdesiredvalue)}
function RandWeap() {
/*Huge function here determining a value and repeating until it
is between mindesiredvalue and maxdesiredvalue*/
}
复选框的写法如下:
<body>
<form>
<i> Press F5 to clear or to get 1 random weapon </i> <br> <br>
Min price: <input type="checkbox" id="min"> <br>
Max price: <input type="checkbox" id="max"> <br> <br>
<button type="button" onclick="RandWeap()">Add a random weapon to list</button>
</form>
</body>
有关如何使其正常工作的想法吗?
谢谢!
编辑
好吧,所以基本上如果我们可以给出类似但真正简化的例子,它看起来像这样:
<html>
<meta charset="utf-8">
<script type="text/javascript" language="JavaScript">
var desiredResult;
desiredResult = (parseInt(window.prompt("Valeur désirée")))
function dice(){
var result, missed;
result = (Math.floor(Math.random() * 6) + 1)
if (desiredResult == result) {document.body.innerHTML += result}
else if (desiredResult != result) {dice()}
}
window.onload = dice
</script>
<body>
Choose value: <input type="checkbox" id="choose"> <br> <br>
<button type="button" onclick="dice()">Roll dice!</button>
</body>
</html>
因此我们提示所需的值,然后重复该函数,直到它是我们想要的值。现在,应该对此代码进行哪些编辑,以便仅在复选框为checke时才提示所需的值?因此,onload当然不会被检查,所以它只会输入随机值。然后,当我们单击一个按钮时,它会重复此步骤,但如果我们刚刚检查了该框,它将提示所需的值。我不确定它是否清楚......但基本上这就是我想知道的。如果有人知道我需要添加的代码,那将是非常好的!
答案 0 :(得分:1)
您可以使用event
之类的onclick
。
使用点击event
的纯javascript示例:
var isCheckedWithGlobalVariable = false;
document.getElementById('myInput').onclick = function() {
if (this.checked == true) {
// the element is checked
isCheckedWithGlobalVariable = true;
}
};
也许您需要在多个元素上使用此功能,因此您可以将querySelectorAll
与for
一起使用。
例如:
var isCheckedWithGlobalVariable = false;
var elements = document.querySelectorAll('input[type=checkbox]');
for (var i = 0; i < elements.lenght; i++) {
elements[i].onclick = function() {
if (this.checked == true) {
// checked
isCheckedWithGlobalVariable = true;
}
};
}
在jQuery上,您可以将:checked
选择器与click
事件一起使用:
var isCheckedWithGlobalVariable = false;
$('#myInput').click(function() {
if ($(this).is(':checked')) {
// checked
isCheckedWithGlobalVariable = true;
}
})
OR
var isCheckedWithGlobalVariable = false;
$('#myInput:checked').click(function() {
// only if it is checked
isCheckedWithGlobalVariable = true;
})
或使用多个元素:
var isCheckedWithGlobalVariable = false;
$('input').click(function() {
if ($(this).is(':checked')) {
// this element is checked
isCheckedWithGlobalVariable = true;
}
})
答案 1 :(得分:0)
我假设您的脚本在您的头部或身体顶部是内联的?如果是这样,问题是您的复选框在脚本运行时不存在。
据推测,您希望在用户单击按钮时提示,在这种情况下,您应该执行以下操作:
a)包裹你的主要&#34;得到最小/最大&#34;函数中的代码,和 b)点击按钮调用该功能。
像这样:
var maxdesiredvalue, mindesiredvalue;
function getMinMax() {
if (document.getElementById("min").checked == false) {
mindesiredvalue = 0.00
} else {
mindesiredvalue = window.prompt("Valeur minimale désirée:");
mindesiredvalue = parseInt(mindesiredvalue)
}
if (document.getElementById("max").checked == false) {
maxdesiredvalue = 9999999.99
} else {
maxdesiredvalue = window.prompt("Valeur maximale désirée:");
maxdesiredvalue = parseInt(maxdesiredvalue)
}
}
function RandWeap() {
getMinMax();
alert("Min: " + mindesiredvalue + " Max: " + maxdesiredvalue);
//Huge function here determining a value and repeating until it
//is between mindesiredvalue and maxdesiredvalue
}
有更优雅的解决方案,但这是它的本质。