gpt4 book ai didi

javascript - 类型错误 : "Not a function" using "this" keyword in a function

转载 作者:行者123 更新时间:2023-11-30 08:28:52 24 4
gpt4 key购买 nike

我创建了以下函数。

function showAllSelectOpts(select)
{
selectLength = select.children().length;
select.attr('size',selectLength);
select.css('height','auto');
select.focusout(function(){
select.attr('size','1');
});
}

当像这样 showAllSelectOpts(mySelect); 这样的选择元素上直接调用它时它工作正常,但是当在另一个函数中调用时,如下使用关键字“this”,它返回错误. 类型错误:select.children 不是函数

$('select').on('focus',function(){
showAllSelectOpts(this);
})

这是范围问题还是什么,我该如何解决?

最佳答案

在事件处理程序中,this 是对 DOM 元素的引用,而不是 jQuery 对象。但是您的 showAllSelectOpts 期望它的参数是一个 jQuery 对象。

要么更改调用以使用 $() 包装 DOM 元素:

showAllSelectOpts($(this));

...更新showAllSelectOpts以自行执行此操作:

function showAllSelectOpts(select)
{
select = $(select); // ***
selectLength = select.children().length;
select.attr('size',selectLength);
select.css('height','auto');
select.focusout(function(){
select.attr('size','1');
});
}

旁注:A.Wolff points out ,您的函数将 focusout 处理程序附加到选择每次 调用。你只想要一个

我会完全删除处理程序的那部分,并用单个 focusout 替换它:

function showAllSelectOpts(select)
{
var selectLength = select.children().length;
select.attr('size',selectLength);
select.css('height','auto');
}
$('select')
.on('focus',function(){
showAllSelectOpts($(this));
})
.on('focusout', function(){
$(this).attr('size', '1');
});

另请注意,我在 showAllSelectOpts 中为 selectLength 添加了一个 var(尽管实际上,您可以完全删除该变量);没有一个,代码就会成为 The Horror of Implicit Globals 的牺牲品。 (那是我贫血的小博客上的帖子)。请务必声明您的变量。

关于javascript - 类型错误 : "Not a function" using "this" keyword in a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40948738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com