Javascript Switch函数在未调用时激发,在使用addEventListener时也默认不阻止

Javascript Switch函数在未调用时激发,在使用addEventListener时也默认不阻止,javascript,html,switch-statement,addeventlistener,Javascript,Html,Switch Statement,Addeventlistener,我想要一个按钮,显示不同的文本在一个地区取决于是否点击或双击,或没有任何文本,如果没有点击,也右键点击不应该显示任何菜单 <button id='test'>click me</button> <p id='description'></p> 该区域显示“文本编号1”,无论是否单击按钮。右键单击按钮显示默认浏览器菜单。您将立即调用函数尝试切换,这将把函数返回的值(即应答)传递给添加的监听器,而不是传递函数 将函数的调用表达式包装到另一个函数中

我想要一个按钮,显示不同的文本在一个地区取决于是否点击或双击,或没有任何文本,如果没有点击,也右键点击不应该显示任何菜单


<button id='test'>click me</button>
<p id='description'></p>

该区域显示“文本编号1”,无论是否单击按钮。右键单击按钮显示默认浏览器菜单。

您将立即调用函数
尝试切换
,这将把函数返回的值(即
应答
)传递给
添加的监听器
,而不是传递函数

  • 将函数的调用表达式包装到另一个函数中
  • 而且您不需要
    返回
    description.innerHTML=answer
const descripptrion=document.getElementById('description');
功能尝试开关(val){
让我们回答=“”
开关(val){
案例1:answer=“文本编号1”
打破
案例2:answer=“文本编号2”
打破
默认值:answer=“完全没有”
}
description.innerHTML=答案;
}
const test=document.getElementById('test');
test.addEventListener('click',()=>trySwitch(1));
test.addEventListener('dblclick',()=>trySwitch(2));
test.addEventListener('auxclick',函数(事件){
event.preventDefault()
});


测试
您要调用它两次,在这里:

test.addEventListener('click', trySwitch(1));
test.addEventListener('dblclick', trySwitch(2));
trySwitch(1)
trySwitch(2)
不是函数,它们是函数调用。传递给
addEventListener
的是
尝试开关(/*1或2*/)
的计算结果,因此一些字符串,因此单击/dblclick时不会发生任何事情

使
trySwitch
成为高阶函数:

function trySwitch(val) {
  return function() {
    let answer=""

    switch(val) {
      case 1: answer="text number one";
        break;
      case 2: answer="text number two";
        break;
      default: answer = "literally nothing";
    }

    return description.innerHTML= answer;
  }
}
function trySwitch(val) {
  return function() {
    let answer=""

    switch(val) {
      case 1: answer="text number one";
        break;
      case 2: answer="text number two";
        break;
      default: answer = "literally nothing";
    }

    return description.innerHTML= answer;
  }
}