2011-05-19 50 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/