javascript - 未捕获的类型错误 : Cannot read property 'defaultView' of undefined with a IIFE

标签 javascript jquery

我正在学习 jQuery 第 4 版(PacktPub 发布),尝试其中一项练习,我必须创建新的插件方法,称为 .slideFadeIn() 和 .slideFadeOut(),结合 .slideFadeOut() 的不透明度动画。 fadeIn() 和 .fadeOut() 与 .slideDown() 和 .slideUp() 的高度动画。

这是我当前的代码

(function($) {
  $.fn.slides={
    slideIn:function(){
      $(this).fadeIn().slideDown();
    },
    slideOut:function(){
      $(this).fadeOut().slideUp();
    }
  }
})(jQuery);

$('h1').click(function(){
  $(this).slides.slideOut();
});

然而当我点击 <h1> ,我收到错误消息,

Uncaught TypeError: Cannot read property 'defaultView' of undefined

我也试过

(function($) {
  var elem=$(this);
  $.fn.slides={
    slideIn:function(){
      elem.fadeIn().slideDown();
    },
    slideOut:function(){
      elem.fadeOut().slideUp();
    }
  }
})(jQuery);

看看错误是不是因为$(this)指的是不同的上下文,但我仍然遇到相同的错误

Uncaught TypeError: Cannot read property 'defaultView' of undefined 

编辑:我尝试将代码编辑为

$('h1').fadeOut().slideUp();

它有效,所以问题在于 $(this) ,我只是不明白 $(this) 到底是什么问题

谁能指出我的错误?

谢谢!

最佳答案

您创建插件的方式与我的略有不同,因为“this”是“fn.slides”范围“this”——因此,它会出错。我能够通过传递你想要的“this”的上下文来解决你的问题——这是通过使用“call”的“h1”。通过“调用”(和“应用”),我可以调用该函数并传入我想要的“this”上下文。

(function($) {
  $.fn.slides={
    slideIn:function(){
      $(this).fadeIn().slideDown();
    },
    slideOut:function(){
      $(this).fadeOut().slideUp();
    }
  }
})(jQuery);

$('h1').click(function(){
  $(this).slides.slideOut.call(this);
});

关于javascript - 未捕获的类型错误 : Cannot read property 'defaultView' of undefined with a IIFE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23146160/

相关文章:

javascript - 如何将textarea数据保存到html文件中?

javascript - 一次滚动左 div 和右 div

javascript - 我想移动多个数组列表中的元素

javascript - Phantom JS 消除屏幕截图的边距

javascript - Angular 4 : abort all pending $http requests on route change

javascript - 设置 Twitter API,获取最后几条推文

jquery - 如果包含的 DIV 类发生更改,Firefox 会重新启动 Flash 影片

javascript - 如果即时禁用开启器,则禁用 nyromodal 打开模式

javascript - 停止将字符输入到表单中

Javascript重新运行超时后被清除