作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了以下函数。
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/
我是一名优秀的程序员,十分优秀!