将函数数组传递给button.onclick函数
Passing an function array to a button.onclick function
我的TypeScript/JavaScript 有问题
我有一系列类似的功能
private listeners: ((name: string) => void)[] = [];
我正在另一个似乎有效的函数中添加函数。
现在,如果按下按钮,我想调用这些函数
button.onclick = function(){
this.listeners.forEach((callback) => callback(username));
}
如果我以这种方式尝试我的代码,什么都不会发生,我敢打赌是因为它不知道listeners
。
我的下一次尝试是
button.onclick = function(listeners){
listeners.forEach((callback) => callback(username));
}
现在tsc告诉我
错误TS2339:类型"MouseEvent"上不存在属性"forEach"。
我打赌我这里缺少一个类型,但我知道如何告诉他这个数组是((name: string) => void)[] = [];
类型的函数数组
如果有人知道一个快速的解决方法,那就太好了。在你问之前:我确信我的函数向我的数组添加了函数(至少在添加函数中listerns
的大小变大了(:D
试着像这样定义onclick处理程序,以保持"this"指向当前类实例:
private onClick(ev)
{
this.listeners.forEach((callback) => callback(username));
}
//Then somewhere later
button.onclick = (ev) => this.onClick(ev);
您的主要问题是this
没有引用您期望的上下文。相反,this
指的是单击处理程序的MouseEvent
上下文。
作为解决问题的简单方法,您可以使用Function.prototype.bind()
。
更改
button.onclick = function(){
this.listeners.forEach((callback) => callback(username));
}
到此
button.onclick = function(){
this.listeners.forEach((callback) => callback(username));
}.bind(this);
基本解释:
bind((方法创建一个新函数,当调用该函数时,将其this关键字设置为提供的值,并在调用新函数时提供的任何参数之前有一个给定的参数序列。
处理问题的一种更复杂的方法是根本不使用onclick
,而是使用addEventListener
,并且您可以使用以下鲜为人知的方法,将带有handleEvent
方法的对象传递给addEventListener
,这使您使用this
的所有问题都变得毫无意义:
class Foo {
private listeners: ((name: string) => void)[] = [];
constructor(button) {
button.addEventListener('click', this);
}
handleEvent(event) {
// check event type
this.listeners.forEach(callback => callback(username));
}
}
const new Foo(document.getElementById('myButton'));
感谢awnsers
我想直接添加一个函数是行不通的,因为它是一个Eventhandler函数,它在代码中的某个地方工作,但在我定义它的地方不工作。
我改为addeventhandler,并在函数中用let定义了一个函数,并为Eventhandler调用了一个新函数,该函数调用了它应该调用的函数#函数:D
let triggerOnClick = () => {
let username = tf_name.value;
this.listeners.forEach((callback) => callback(username));
};
btn_enter.addEventListener("click", () => {
triggerOnClick();
});
该代码有效:(
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- react native renderRow with button:将rowData推到按钮函数
- 未捕获的类型错误:$(..).button不是函数
- 使用php调用带有image Button的js函数,无需提交
- 可以't从Button访问IIFE内部函数
- 为什么会出现JQuery错误:$(“.left_hand_icon”).button不是函数
- 无法将button的HTML传递给Angular的ng-click函数
- Javascript函数在button事件调用它之前被调用
- 将函数数组传递给button.onclick函数
- 通过调用.click()来启动asp:Button的OnClick函数
- data-role =“button"样式不应用于js函数