【发布时间】:2018-06-13 11:59:19
【问题描述】:
相当菜鸟的问题。
我有一个事件侦听器函数,我正在执行一些 DOM 操作。它看起来像这样:
(function(){
$('.js-service-more-close').on('click', function() {
var self = $(this);
var service = self.closest('.service-more').prev('.service');
var figures = self.closest('.service-more-inner-bar').next('.service-more-inner').find('figure');
self.closest('.service-more').removeClass('service-more--is-expanded').css('max-height', 0);
service.removeClass('service--is-active');
figures.removeClass('fade-in');
});
})();
它工作正常。
我想我会将这些操作提取到另一个函数中,这样我就可以在其他地方重复使用它们。我现在有这个。
var closeItUp = function() {
var self = $(this);
var service = self.closest('.service-more').prev('.service');
var figures = self.closest('.service-more-inner-bar').next('.service-more-inner').find('figure');
self.closest('.service-more').removeClass('service-more--is-expanded').css('max-height', 0);
service.removeClass('service--is-active');
figures.removeClass('fade-in');
};
(function(){
$('.js-service-more-close').on('click', function() {
closeItUp();
});
})();
这不起作用,我不知道为什么。没有明显的控制台错误。
有人能指出正确的方向吗?
【问题讨论】:
-
这个问题的标题具有误导性,因为您没有将函数传递给任何地方的 IIFE。在将代码移出相关闭包时,您只是丢失了
this对象,但函数本身确实被调用了。 -
感谢@Mtz 的澄清!
标签: jquery parameter-passing addeventlistener