为什么我的JavaScript函数会看到mouseevent而不是空变量?

时间:2018-01-31 17:32:43

标签: javascript

我将eventlistener附加到页面上的按钮。单击时,它会运行一个函数。

harvestDataBtn.addEventListener("click", harvestData, false);

该函数可选择取值。

function harvestData(idsToHarvest)

我不希望单击按钮将任何内容传递给函数。可选变量idsToHarvest用于被调用函数的其他实例,与单击分开。

然而,当我点击按钮时,idsToHarvest是一个鼠标事件。在我的函数中使这个代码不能按预期工作。

if ( idsToHarvest ) {
  // do something with string
} else {
  // button was clicked, do something else
}

2 个答案:

答案 0 :(得分:3)

您可以向事件侦听器传递一个函数,该函数将您所需的调用包装到harvestData并忽略默认传递的事件对象:

harvestDataBtn.addEventListener("click", function (e){harvestData();}, false);

答案 1 :(得分:0)

git clean

第二个参数,在本例中是一个函数,它希望传入的参数是事件对象。

如果您将相同的函数用于其他目的并且期望参数是其他的,那么它将不能用作事件处理程序。

来自the spec,它声明:

  

事件监听器由以下字段组成:

     
      
  • type (一个字符串)
  •   
  • 回调el.addEventListener("click", function (event){ ... });
  •   
  • 捕获(布尔值,最初为假)
  •   
  • 被动(布尔值,最初为假)
  •   
  • 一次(布尔值,最初为假)
  •   
  • 已删除(用于簿记目的的布尔值,最初为假)
  •   

如上所述,它显示EventListener实际上是callback,由显示的界面定义:

EventListener

如您所见,当评估回调并调用callback interface EventListener { void handleEvent(Event event); }; 时,它接受handleEvent类型的1个参数 event