当前位置: 首页 > 面试题库 >

如何在addEventListener中使用函数传递参数?

公西鸿博
2023-03-14
问题内容

以传统方式添加事件侦听器:

function getComboA(sel) {
    var value = sel.options[sel.selectedIndex].value;  
}

<select id="comboA" onchange="getComboA(this)">
<option value="">Select combo</option>
<option value="Value1">Text1</option>
<option value="Value2">Text2</option>
<option value="Value3">Text3</option>
</select>

但是我想适应addEventListener的方式:

productLineSelect.addEventListener('change',getSelection(this),false);

function getSelection(sel){
    var value = sel.options[sel.selectedIndex].value;
    alert(value);
}

它不起作用,因为我无法将getSelection()中的任何参数作为addEventListener方法中的第二个参数传递?据我所知,我只能使用没有括号的函数名。

任何的想法?


问题答案:

无需传递任何内容。用于的函数addEventListener将自动this绑定到当前元素。只需this在您的函数中使用:

productLineSelect.addEventListener('change', getSelection, false);

function getSelection() {
    var value = this.options[this.selectedIndex].value;
    alert(value);
}

如果要将任意数据传递给函数,请将其包装在您自己的匿名函数调用中:

productLineSelect.addEventListener('change', function() {
    foo('bar');
}, false);

function foo(message) {
    alert(message);
}

如果你想设置的值this手动,您可以使用该call方法来调用该函数:

var self = this;
productLineSelect.addEventListener('change', function() {
    getSelection.call(self);
    // This'll set the `this` value inside of `getSelection` to `self`
}, false);

function getSelection() {
    var value = this.options[this.selectedIndex].value;
    alert(value);
}


 类似资料:
  • 问题内容: 情况有点像- 问题在于,的值在的侦听器函数中不可见,在该函数中它可能被视为新变量。 问题答案: 您编写的代码绝对没有错。双方并应访问的,以防他们在上下文中可用的匿名 已创建。 检查警报是否为您提供了您一直在寻找的值,请确保它可以在匿名函数的范围内访问(除非您对调用旁边有更多对相同变量进行操作的代码)

  • 本文向大家介绍如何在PowerShell函数中传递参数?,包括了如何在PowerShell函数中传递参数?的使用技巧和注意事项,需要的朋友参考一下 您可以在PowerShell函数中传递参数,并且要捕获这些参数,需要使用参数。通常,当您在函数外部使用变量时,您实际上不需要传递参数,因为变量本身是Public,可以在函数内部访问。但是在某些情况下,我们需要将参数传递给函数,下面的示例说明了如何编写该

  • 问题内容: 这是一个简单程序的概述 我只是不断获取“未定义全局名称foo” .....有人可以帮我吗?谢谢! 问题答案: 代码段必须是独立的-它们不能进行外部引用。您必须在statement-string或setup-string中定义值: 更好的是,重写代码以不使用全局值。

  • 问题内容: 请告知如何将参数传递给使用的函数。 我的例子是不正确的。 问题答案: 您需要创建一个匿名函数,以便不会立即执行实际函数。

  • 问题内容: 在Java中,如何将一个函数作为另一个函数的参数传递? 问题答案: Java 8及以上 如果你的类或接口只有一个抽象方法(有时称为SAM type),则使用Java 8+ lambda表达式,例如: 然后可以在使用MyInterface的任何地方替换lambda表达式: 例如,你可以非常快速地创建一个新线程: 并使用方法引用语法使其更加清晰: 如果没有 lambda表达式,则最后两个示

  • 我有一个页面显示了当地咖啡馆的列表。当用户单击某个咖啡馆时,将显示一个模式对话框,其中已预先填充了“咖啡馆名称”。该页面包含许多咖啡馆名称,表单应包含他单击的“咖啡馆名称”。 以下是通过链接按钮生成的文本咖啡馆名称列表 这是情态形式 问题是如何将实际值传递到模态形式的“值”属性中? 表单“显示”事件由“onlick”事件触发