2011-05-19 25 views
1

如何保持accordions从页面加载时被初始化......我想它只是从(当然比其他init()),但只有在需要的时候方法的内部运行JavaScript函数重新分配本身

$.extend($.fn, { 
     accordion: function() { 
      var accordion = (function() { 
       var accordions = (function() { 
        alert('test'); 
        return 1; 
       })(); 

       return { 
        init: function (el) { 
         el.click(function (e) { 
          accordion.show(el); 
         }); 
        }, 
        show: function (el) { 
         console.log(accordions); 
        } 
       } 
      })(); 

      this.each(function() { 
       accordion.init($(this)); 
      }); 
     } 
    }); 

我希望我提供足够的细节: - \

+7

如何在页面加载时不调用'.accordion()'? ;) – DarthJDG 2011-05-19 14:31:47

+0

当''.accordion()'运行时,我不希望它运行,只有当第一个手风琴项目被点击时。 – Webnet 2011-05-19 16:42:34

回答

0
$.extend($.fn, { 
    accordion: function() { 
     var accordion = (function() { 
      var accordions = (function() { 
       alert('test'); 
       return 1; 
      })(); 

      return { 
       init: function (el) { 
        el.click(function (e) { 
         accordion.show(el); 
        }); 
       }, 
       show: function (el) { 
        console.log(accordions); 
       } 
      } 
     })(); 
    } 
}); 
function theFunctionYouWanted(){ 
    $('selector').each(function(el) { 
     var $el = $(el); 
     $el.accordion().init($el); 
    }); 
} 

随着你的jQuery扩展到.extend包括.accordion方法。此方法返回一个具有init方法的对象,因此通过调用$ object.accordion()获得对accordion对象的引用,然后可以将其称为init方法将其传递给一个元素。

$el.accordion().init($el) 

如果你想看看这是如何做的地道你应该看看任何伟大的jQuery UI插件。如果您尝试创建类似的插件样式,那么jquery小部件工厂为创建可重用的UI小部件提供了一个很好的起点。有关widget工厂的更多信息,请参阅http://blog.nemikor.com/2010/05/15/building-stateful-jquery-plugins/