javascript - 未捕获的类型错误 : Object [object Window] has no method 'each'

标签 javascript jquery plugins window each

我正在创建一个与 Bootstrap 交互的 jQuery 插件,当我在 jQuery 元素上调用该函数时出现以下错误:

Uncaught TypeError: Object [object Window] has no method 'each' 

这是有问题的 JavaScript:

!function ($) {
$.fn.alertAutoClose = function (interval) {
  setTimeout(function () {
    return $(this).each(function () {
      $(this).hide();
    });
  }, interval);
}(window.jQuery);

插件是这样触发的:

$(".alert").alertAutoClose(1000);

这是页面上的 HTML:

<div class="alert fade in">
  <button type="button" class="close" data-dismiss="alert">&times;</button>
  <strong>Warning!</strong> Best check yo self, you're not looking too good.
</div>

最佳答案

setTimeout() 内部,thiswindow,而不是您的对象。您需要保存 this 引用并执行如下操作:

!function ($) {
$.fn.alertAutoClose = function (interval) {
     var self = this;
     setTimeout(function () {
       self.hide();
     }, interval);
     return this;
}(window.jQuery);

仅供引用,您也可以像这样完成同样的事情:

!function ($) {
$.fn.alertAutoClose = function (interval) {
     this.delay(interval).hide(1);
     return this;
}(window.jQuery);

当您给 .hide() 一个持续时间时,它会变成一个动画,因此它将与 .delay() 一起工作。

此外,jQuery 方法中的 this 值是 jQuery 对象。所以,如果你想调用一个适用于 jQuery 对象中所有元素的方法,你可以直接在 this 上调用该方法。您不必将它变成一个 jQuery 对象(它已经是一个)并且您不必使用 .each() 因为大多数 jQuery 方法(如 .hide() 已经对对象中的所有元素进行了操作。

关于javascript - 未捕获的类型错误 : Object [object Window] has no method 'each' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12701301/

相关文章:

javascript - 从外部页面加载属性

javascript - ajax调用后单选按钮不改变(knockout js)

javascript - 对具有动态大小的列表使用高度和最大高度

jquery - 主干选项选择适用于 Firefox,但不适用于 Chrome

javascript - 在 asp.net 中,文本区域在内容之前有空格

javascript - 如何从函数返回获取 API 结果?

perl - 如何将 Perl Moose 与插件一起用于主要对象?

mongodb - 在 Windows 机器上链接本地插件和数据库后无法访问 Nodebb 上的管理页面

java - 在eclipse上安装EGit会出现问题

javascript - 如何在不影响所有键的情况下在 jquery 中使用 keydown 事件?