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

标签 javascript jquery this

我创建了以下函数。

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/

相关文章:

jquery - 将 HTML 字符串转换为 HTML DOM,而不加载/执行脚本/图像?

jquery - 当 session 超时到期时,将状态发送到数据库。 ASP.Net 和 Jquery

Javascript OOP - 在异步回调中丢失了它

javascript - 单选按钮上的 React onChange 在父 div 元素上触发 onClick

javascript - 如果没有 hack,就不能在私有(private) JavaScript 函数中访问“this”对象吗?

javascript - 如何使用 jQuery 更改 html 元素的拆分符号

c++ - 用 'this' 指针初始化 std::array

javascript - webRTC 视频聊天中的噪音/回声

javascript - 如何在dom中制作一些特定值的字符串?

jquery - 如何使用 jQuery 的 .text 属性检索单击元素的文本?