JavaScript开关语句只返回第一种情况

JavaScript开关语句只返回第一种情况,javascript,html,dom,Javascript,Html,Dom,我正在用vanilla JS制作一个计算器,在运行switch语句对每种情况执行不同的操作之后,程序只返回第一种情况 let res=document.getElementById(“res”) let sub=document.getElementById(“提交”) 让sel=document.getElementById(“sel”) let opt=sel.options[sel.selectedIndex]; sub.addEventListener(“单击”,()=>{ 设inp1

我正在用vanilla JS制作一个计算器,在运行switch语句对每种情况执行不同的操作之后,程序只返回第一种情况

let res=document.getElementById(“res”)
let sub=document.getElementById(“提交”)
让sel=document.getElementById(“sel”)
let opt=sel.options[sel.selectedIndex];
sub.addEventListener(“单击”,()=>{
设inp1=Number(document.getElementById(“input1”).value)
设inp2=Number(document.getElementById(“input2”).value)
开关(选择值){
格“+”:
res.innerHTML=inp1+inp2;
打破
案例“-”:
res.innerHTML=inp1-inp2;
打破
案例“*”:
res.innerHTML=inp1*inp2;
打破
案例“/:
res.innerHTML=inp1/inp2;
打破
违约:
res.innerHTML=“请在所有空白字段中输入内容”;
}
})

+
-
*
/
提交

您从不更新所选选项,因此它总是指初始值。 每次单击按钮时都必须更新该值

在回调函数中移动该行

let res=document.getElementById(“res”)
let sub=document.getElementById(“提交”)
让sel=document.getElementById(“sel”)
// ---
sub.addEventListener(“单击”,()=>{
// +++
让opt=sel.options[sel.selectedIndex];
// ...
}) 

如果您需要在其他地方使用
opt
,您可以添加另一个侦听器并保留您拥有的内容:

sel.addEventListener('change', () => {
    opt = sel.options[sel.selectedIndex];
});

这将允许
opt
在您的
sub之外被引用。单击
listener。

您根本不需要
opt
。使用select的值,而不是在加载时获取选定选项的值<代码>选择值
将在每次更改时显示所选选项的值

简单地说,就是改变

switch (opt.value)

以下是更新的代码片段:

let res=document.getElementById(“res”)
let sub=document.getElementById(“提交”)
让sel=document.getElementById(“sel”)
sub.addEventListener(“单击”,()=>{
设inp1=Number(document.getElementById(“input1”).value)
设inp2=Number(document.getElementById(“input2”).value)

开关(sel.value){/您正在使用所选索引,如果您使用console.log sel值,您将看到您有完整的代码行,selectedIndex将返回第一个索引。 只是不要使用selectedIndex,而是使用

let res = document.getElementById("res");
let sub = document.getElementById("submit");
let sel = document.getElementById("sel");

sub.addEventListener("click", () => {
let inp1 = Number(document.getElementById("input1").value)
let inp2 = Number(document.getElementById("input2").value)
console.log(sel.value);
switch(sel.value){
    case "+": 
    res.innerHTML=inp1+inp2; 
    break;
    case "-": 
    res.innerHTML=inp1-inp2; 
    break;
    case "*": 
    res.innerHTML=inp1*inp2; 
    break;
    case "/": 
    res.innerHTML=inp1/inp2; 
    break;
    default:
    res.innerHTML="Please enter something in all of the empty fields";  
}
})


此代码将解决您的问题:)

您需要在单击侦听器中移动行
让opt=sel.options[sel.selectedIndex];
,否则它在initl加载后不会更新可能重复的
let res = document.getElementById("res");
let sub = document.getElementById("submit");
let sel = document.getElementById("sel");

sub.addEventListener("click", () => {
let inp1 = Number(document.getElementById("input1").value)
let inp2 = Number(document.getElementById("input2").value)
console.log(sel.value);
switch(sel.value){
    case "+": 
    res.innerHTML=inp1+inp2; 
    break;
    case "-": 
    res.innerHTML=inp1-inp2; 
    break;
    case "*": 
    res.innerHTML=inp1*inp2; 
    break;
    case "/": 
    res.innerHTML=inp1/inp2; 
    break;
    default:
    res.innerHTML="Please enter something in all of the empty fields";  
}