在jQuery插件init上的document.ready()?

时间:2013-02-18 13:45:02

标签: jquery jquery-plugins

我正在编写一个插件,它将创建一些DIV并在插件初始化时为它们应用样式。在下面的示例代码中,我正在将.disableSelection()应用于某些元素。

最初我在document.ready包装器中有这些东西,但后来读到这不是理想的解决方案,因为有人可以在文档加载后调用插件。我的理解是document.ready在文档加载时一次触发,就是这样。

如果是这种情况,我可以使用什么代替document.ready来应用样式等插件初始化?

$.examplepluginname = {
 id: 'examplepluginname'
,version: '1.0'
,copyright: 'Copyright (c) 2013 Example Name'
,uri: 'http://www.example.com/'
,licensed: {
    MIT: 'http://www.opensource.org/licenses/mit-license.php'
    ,GPL: 'http://www.gnu.org/licenses/gpl.html'
}
/*,plugin: function(prepare,sort){
    aPluginPrepare.push(prepare);   // function(settings){doStuff();}
    aPluginSort.push(sort);         // function(valuesAreNumeric,sA,sB,iReturn){doStuff();return iReturn;}
}*/
,defaults: { // default settings
    searchDefaultText: 'Search & hit ENTER to add to list' //Text to show when user is not entering a search term
}
};

(function($) {
//Attach this new method to jQuery
$.fn.extend({ 
    //pass the options variable to the function
    examplepluginname: function(options) {

        var userSettings =  $.extend($.examplepluginname.defaults, options)
            //Switcher for when the user presses enter before search results come back
            ,selectOnlyResult = false
            //Arrow key navigation setting
            ,displayBoxIndex = -1
        ;

        /*
            RUN INITIALIZATION SETTINGS
        */
        $("#availableItems").disableSelection();
        displayAvailableItems();
        //Set the display styles    
        $('#tagSearch').css({
            'width': '100%',
            'border-radius': '5px',
            'outline': '0 none',
            'padding': '2px 3px',
            'font-style': 'italic'
        });

        return this.each(function() {
});
        }
    });
})(jQuery);

2 个答案:

答案 0 :(得分:1)

  

我的理解是,文件已经一次性激活了   文档已加载,就是这样。

不,这不是问题。如果在事件发生后调用ready,它将直接调用回调函数。

答案 1 :(得分:1)

  

如果是这种情况,我可以使用什么代替document.ready来在插件初始化时应用样式等?

如果您的插件需要一次性初始化(而不是需要按使用进行初始化)并且您无法重构以消除该要求,那么您最好的选择是在插件,指示您是否已完成init。当用户触发插件(每次使用调用)时,检查标志,必要时进行一次性初始化并更新标志。然后执行per-use init(无论你是否刚刚执行了一次性init)。