我有这个:
function FilterSelect(select, search) {
this.select = select;
this.search = search;
// Get the current list options
this.options = this.select.options;
// Whenever the text of the search box changes, do this
this.search.onkeyup = function() {
// Clear the list
while(this.select.options.length > 0) {
this.select.remove(0);
}
}
}
在onkeyup
函数内部,我想访问select
,但我知道它不可能存在。这样做的正确方法是什么?
答案 0 :(得分:8)
在onkeyup函数之前,声明一个变量。类似于var _this = this
,然后在keyup函数中,只需使用_this
代替this
。
所以你的代码看起来像是:
var _this = this;
// Whenever the text of the search box changes, do this
this.search.onkeyup = function() {
// Clear the list
while(_this.select.options.length > 0) {
_this.select.remove(0);
}
}
答案 1 :(得分:3)
您需要创建一个变量,该变量将保存在onkeyup
函数的闭包范围内:
function FilterSelect(select, search) {
var _this = this; // <-- win
_this.select = select;
_this.search = search;
// Get the current list options
_this.options = this.select.options;
// Whenever the text of the search box changes, do this
_this.search.onkeyup = function() {
// Clear the list
while(this.select.options.length > 0) {
_this.select.remove(0);
}
}
}
通过这样做,您可以确保引用正确的值,无论调用onkeyup
函数的范围是什么(通常是因为事件而导致的全局/窗口范围)。
修改强>
实际上,如果您只需要访问select
,您应该可以这样做:
this.search.onkeyup = function() {
// Clear the list
while(this.select.options.length > 0) {
select.remove(0);
}
}