2009-10-18 80 views
0

我正在研究一個jQuery插件,我希望用戶在標誌(在代碼中)設置爲true後傳遞方法名稱以執行。我已經有了需要的標誌,我只需要一種方法來執行傳遞的方法。 例如:採用用戶方法的jQuery插件

(function(jQuery){ 
    $.fn.extend({ 
    pluginName: function(options) { 
    var defaults = { 
    parameter1: 0, 
    method: function(){} 
    }  
    var options = $.extend(defaults, options); 

     return this.each(function() { 
    var opt = options; 
    var flag = false; 
    if(opt.parameter1 > 0){ 
    flag = true; 
    } 
    if(flag){ 
    //call users method 
    } 
       jQuery(this).hide(); 


     });//END return 
    }//END counter method 
});//END extend 
     })//END function 
     //Return jQuery object 
     (jQuery); 

用戶會這樣稱呼它:

$("#divName").pluginName({ 
    parameter1: 1, 
    method: function(){alert("test");} 
}); 

我沒有測試上面的代碼,它只是一個例證,所以你可以看到什麼,我試圖完成。 在此先感謝!

+0

我覺得你的意思開始與插件'(函數($){...'而不是'(函數(jQuery){...'以便您可以使用'$'簡寫來引用函數 – 2009-10-18 19:52:17

回答

1

有喜歡你的例子,任何一個用戶提供的方法沒有什麼區別其他方法。因此,您可以像調用其他方法一樣調用它。

例如:

if (flag) 
    opt.method(); 

如果方法帶有參數,你可以通過它們,你將參數傳遞給普通的方法一樣。

4

因爲函數是JavaScript中的第一類對象,你可以使用

options.method(); 

在你的插件執行功能

1

此評論與您的​​問題沒有關係,但我認爲值得注意的是可以幫助您更全面地瞭解jQuery和JS。

您的代碼當前讀取:

(function(jQuery) { 
    $.fn.extend({ 
    /* ... */ 
    }); 
})(jQuery); 

其中一個原因,以這種方式使用jQuery的時候創建一個匿名的功能是讓你可以參考$對象,而與其他JavaScript庫衝突。但是,您接受名稱爲jQuery的參數到您的匿名函數中,然後繼續撥打$.fn.extend而不是jQuery.fn.extend

如果您打算引用jQuery對象爲你的代碼$,我建議在匿名函數,可以矯正你的參數名稱$,即:

(function($) { 
    $.fn.extend({ 
    /* ... */ 
    }); 
})(jQuery); 
+0

中的jQuery對象)查看註釋在這個問題上:) – 2009-10-18 20:08:24

+0

感謝您指出,我打算使用jQuery名稱空間來避免與其他庫衝突;我忘了用「jQuery」替換所有「$」。 – Wilkins 2009-10-18 21:08:50