2012-10-03 68 views
3

我創建一個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> 

回答

1

裏面的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()已經對對象中的所有元素進行操作。

+0

Thanks!That worked 。 – thesbros

相關問題