javascript - 使用 HTML 和 JavaScript 的逻辑门
问题描述
HTML 和 JavaScript 的新手,我正在尝试制作一个网页,让用户选择他们想要使用的门,例如
AND
OR
XOR
NAND
NOR
用户通过下拉框输入他们的选择,然后他们选择要输入的值1
或0
。
这就是我现在所拥有的功能,我正在使用 console.log 来测试它是否正确接收了它所做的选择,但我不知道如何从这里继续前进以及如何运行逻辑门.
function Logic() {
console.log("Invoked Logic")
if (document.getElementById('gate').value == "1")
console.log("1")
else if (document.getElementById('gate').value == "2") {
console.log("2")
}
else if(document.getElementById('gate').value == "3") {
console.log("3")
}
else if (document.getElementById('gate').value == "4") {
console.log("4")
}
else if (document.getElementById('gate').value == "5") {
console.log("5")
}
else {
alert("Not a valid option.");
}
}
<label>Which Logic Gate would you like?</label> <select id="gate">
<option value ="d"> Please Select</option>
<option value="1" >AND</option>
<option value ="2">OR</option>
<option value="3">XOR</option>
<option value ="4">NAND</option>
<option value="5">NOR</option>
</select> <br> <br>
<label>What value would you like the second input to be?</label> <select id="v2">
<option value ="d"> Please Select</option>
<option value="b1">0</option>
<option value ="b2">1</option>
</select>
对于 1 或 0 的值,我使用另一个下拉菜单(其中两个)。
我将如何获取两个下拉列表的值,然后将它们输入相应的逻辑门?
编辑似乎我所有的 if 语句都将这个错误推给了我。
意外类型强制
我能够通过使用三等号来修复它。
这不是主要问题,我的问题是我不明白如何将两个作为字符串的下拉值本身转换为布尔值,然后将其运行到逻辑门方程中。
如果用户选择了“与”门和 a1
和,这就是一个例子0
。1
and被转换为布尔值,0
因此 1 为真,0 为假,然后输出它们通过逻辑门运行的结果 so 0
。
解决方案
将逻辑功能附加到选择框的更改事件。检查它们是否都具有有效值。如果是这样,则根据使用的门计算结果。
/*
document.getElementById('gate').addEventListener('change', logic);
document.getElementById('v1').addEventListener('change', logic);
document.getElementById('v2').addEventListener('change', logic);
*/
document.getElementById('buttonId').addEventListener('click', logic);
function logic() {
var elGate = document.getElementById('gate');
var elV1 = document.getElementById('v1');
var elV2 = document.getElementById('v2');
var gateValue = elGate.value !== 'd' ? parseInt(elGate.value) : undefined;
var v1Value = elV1.value === 'b1' ? false : elV1.value === 'b2' ? true : undefined;
var v2Value = elV2.value === 'b1' ? false : elV2.value === 'b2' ? true : undefined;
var result = 'Invalid result';
if (v1Value !== undefined && v2Value !== undefined && gateValue !== undefined && gateValue > 0 && gateValue < 6) {
switch (gateValue) {
case 1:
result = (v1Value && v2Value) ? 'true' : 'false';
break;
case 2:
result = (v1Value || v2Value) ? 'true' : 'false';
break;
case 3:
result = ((v1Value && !v2Value) || (!v1Value && v2Value)) ? 'true' : 'false';
break;
case 4:
result = (!(v1Value && v2Value)) ? 'true' : 'false';
break;
case 5:
result = (!(v1Value || v2Value)) ? 'true' : 'false';
break;
default:
break;
}
}
document.getElementById('result').value = result;
}
<select id="gate">
<option value="d"> Please Select</option>
<option value="1">AND</option>
<option value="2">OR</option>
<option value="3">XOR</option>
<option value="4">NAND</option>
<option value="5">NOR</option>
</select>
<select id="v1">
<option value="d"> Please Select</option>
<option value="b1">0</option>
<option value="b2">1</option>
</select>
<select id="v2">
<option value="d"> Please Select</option>
<option value="b1">0</option>
<option value="b2">1</option>
</select>
<input id="result">
<button id="buttonId">Run Logic</button>
推荐阅读
- python - 查询在临时端口上运行的 Web 服务器时连接被拒绝
- javascript - 搜索名称不区分大小写的错误
- reactjs - 无法在 vscode 上调试 google SIGN IN
- css - 无法调整 vuetify v-data-table 中的页脚填充
- java - Vaadin 14 - 如何实现一个带有复选框列的网格,允许对多行进行操作?
- html - 如何给一个中间有一个静态单词的单元格提供多个值
- javascript - TypeError:运行 Jest 单元测试时,mxgraph 不是函数
- python - hamcrest:如何输入布尔值
- r - 如何在 datasummary 的输出中包含“column_spec”?
- python - 错误:索引 9 超出轴 0 的范围,大小为 9