我正在尝试将输入数据添加到最后一次击键后延迟2秒的数组中。但是,当我运行此操作时,我收到以下错误:Uncaught TypeError: this._validateInput is not a function
如何正确定位this._validateInput()
以延迟运行?
我尝试了let func = this._validateInput();
,但每次设置func时都会运行该函数。
此外,on-change输入处理程序仅在输入失去焦点时触发。
寻找解决这个问题......
<paper-input id="itemId" on-input="_autoAddToArray"></paper-input>
...
_validateInput () {
console.log('validate input');
}
_autoAddToArray () {
let timeout = null;
clearTimeout(timeout);
timeout = setTimeout(function () {
this._validateInput();
}, 2000);
}
答案 0 :(得分:1)
this
关键字始终引用当前范围的this
,当您在function(){...}
您需要将外部范围中的this
分配给变量。
var self = this;
timeout = setTimeout(function () {
self._validateInput();
}, 2000);
答案 1 :(得分:1)
使用lambda:
$opts = array(
'maxTargets' => 1,
'roots' => array( .... ),
);
或绑定函数
setTimeout(
() => this._validateInput(),
2000
);
任何一种解决方案都应该起作用
lambda有效,因为它没有自己的范围。 绑定有效,因为它在运行它之前“适用”范围
答案 2 :(得分:0)
<paper-input id="itemId" on-input="_autoAddToArray"></paper-input>
...
_autoAddToArray () {
let timeout = null;
clearTimeout(timeout);
let that = this;
timeout = setTimeout(function () {
that._validateInput();
}, 2000);
}
_validateInput () {
if(this.$.itemId.value) {
// do something
}
}