2012-07-26 57 views
0

我的问题与问题here相关。我试图做一个插件,显示一条消息,然后淡出。

这里是插件:

(function($) { 
$.fn.showWarning = function(msg) { 
    return this.each(function() { 
     $(this).text(msg).show().hide(); // <-preloads message 
     $(this).fadeIn('fast', function() { 
      $(this).stop().text(msg); 
      setTimeout(function() { 
       $(this).fadeOut(300); 
      }, 2500); 
     }); 
    }); 
}; 
})(jQuery); 

,整个代码是在这里:http://jsfiddle.net/e5kns/6/

的问题是,该消息不消失,所以我想它有什么TI做的setTimeout。也许$(this)没有引用它应该在哪里?

萤火虫给出:

a.ownerDocument未定义

而且

遗漏的类型错误:无法读取的未定义的属性 '默认视图'

回答

3

你可以

$(this).stop().text(msg).delay(2500).fadeOut(300) 


事实上, this并不比引用其他 window什么。由于浏览器正在呼叫设置为 windowthis超时回调。 this仅基于如何调用函数。

setTimeout($.proxy(function() { 
    $(this).fadeOut(300); 
}, this), 2500); 

会解决这个问题,因为它产生丢弃this和使用所提供的this并明确applie另一个函数s,为您的原始功能。

+0

谢谢你,成功了!但是,使用'delay'时会出现一些问题。为什么这种方式链接时不起作用。这里的链接:http://jsfiddle.net/e5kns/8/ – Ziik 2012-07-27 17:06:33

1

试试这个,

(function($) { 
    $.fn.showWarning = function(msg) { 
     return this.each(function() { 
      $(this).text(msg).show().hide(); // <-preloads message 
      $(this).fadeIn('fast', function() { 
       $this = $(this); 
       $(this).stop().text(msg); 
       setTimeout(function() { 
        $this.fadeOut(300); 
       }, 2500); 
      }); 
     }); 
    }; 
})(jQuery); 

PS:由于@Esailija建议,迪利和淡出更好

+0

谢谢你的替代解决方案,它也做的工作! – Ziik 2012-07-27 17:10:24

相关问题