javascript - 使用参数和访问元素和事件添加和删除事件监听器? - Javascript

标签 javascript html event-listener

假设我想将参数传递给我的函数。我听说我应该通过从这样的函数中调用另一个函数来做到这一点:

myElement.addEventListener("click",function whatever(event){
    myFunk(event,"some argument");
},false);

但是如果我想删除它怎么办?

myElement.removeEventListener("click",whatever,false);

var myElement = document.querySelector('div')
function myFunk(e,m){
  console.log(e,m)
}
myElement.addEventListener("click",function whatever(event){
    myFunk(event,"some argument")
},false)

myElement.removeEventListener("click", whatever, false)
<div></div>

这会在控制台中返回一个“未定义的”错误。那么我的函数没有名字吗? “随便”不是它的名字吗?我现在该如何删除它?

我需要一种方法来分配一个事件监听器并向其传递参数,然后再将其删除。我该怎么做?

编辑:

好的,是的,我不能引用任何内容,因为它是内联编写的。但是我被迫使用内联函数表达式的原因是因为我想给它传递参数。我想给它传递参数,因为我不想每次我想改变行为时都定义一个新函数。如果我使用“on”属性上的文本定义一个事件监听器,我可以轻松地换出参数:

element.onClick("myFunc('做一件事')");

element.onClick("myFunc('做不同的事情')");

如何使用 addEventListener、内联、可移动和动态参数来做到这一点?

最佳答案

对于 addEventListener() 的第二个参数,这样做:

whatever= function(event) {
  ...
}

... 而不是这个:

function whatever(event) {
  ...
}

然后您就可以像这样删除事件:

myElement.removeEventListener('click' , whatever);

要将参数传递给另一个事件,请使用 bind ,像这样:

whatever= myfunk.bind(myElement, parameter1, parameter2, ...)

示例

var myElement= document.getElementById('myElement');

function myfunk(s) {
  this.innerHTML+= '<br>'+s;
  myElement.removeEventListener('click', whatever);

  myElement.addEventListener(
    'click',
    whatever= myfunk.bind(myElement, 'Clicked again.')
  );
}

myElement.addEventListener(
  'click',
  whatever= myfunk.bind(myElement, 'Clicked once.')
);
<div id="myElement">Click me!</div>

关于javascript - 使用参数和访问元素和事件添加和删除事件监听器? - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31404776/

相关文章:

javascript - 针对 Drupal 7 中的特定错误

jquery - 如何在 input 和 label 元素中创建 mouseover 和 mouseleave 效果

android - 移动应用程序(android/ios)中按钮点击的全局事件监听器

javascript - 按住某个键的同时删除 'idle time'

javascript - 文档滚动高度减去高度

javascript - 将 QJsonObject 转换为 Javascript 对象

javascript - 如何组合 jQuery 的函数

html - 悬停动画文本翻转上的 CSS 不起作用?

javascript - 在 Jest 中测试事件监听器的最简单方法是什么?

javascript - 为什么我的 AJAX 响应包含 HTML 源代码?