2010-03-05 22 views
0

以下代碼引發錯誤「this.element is null」。但是,wid_cont肯定會抓住一個元素。MooTools Fx.Slide throw this.element爲空

window.addEvent('domready',function(){ 
var min = $(document.body).getElements('a.widget_minimize'); 
min.addEvent('click', 
    function(event){ 
    event.stop(); 
    //var box = ; 
    var wid_cont = ($(this).getParents('.widget_box').getElement('.widget_box_content_cont')); 
    var myVerticalSlide = new Fx.Slide(wid_cont); 
    myVerticalSlide.slideOut(); 
    } 
); 
}); 

這も工具1.2.4和具有包括在fx.slide ....

回答

1

它不返回一個單一的元素,但陣列由於getParents()和可能的其他類似的標記後的元素,Fx的.Slide要求你傳遞一個元素。

這裏傳遞數組的第一個項目時,它至少部分工作:http://www.jsfiddle.net/KFdnG/

然而,這是海事組織無效的,難以管理,如果你有一個項目一個長長的清單,需要一個特定的內容層展開只是,您希望保持對內容層的查找更加本地化。

是這樣的: http://www.jsfiddle.net/KFdnG/4/

// store an instance into each content div and set initial state to hidden. 
$$("div.widget_box_content_cont").each(function(el) { 
    el.store("fxslide", new Fx.Slide(el).hide()); 
}); 

$$('a.widget_minimize').addEvent('click', function(event) { 
    event.stop(); 
    // can't use this.getNext() due to wrapper by Fx.Slide which does not have the instance. 
    this.getParent().getElement("div.widget_box_content_cont").retrieve("fxslide").toggle(); 
}); 

其上的標記工作:

<div class="widget_box"> 
    <div class="widget_box_content"> 
     <a href="#" class="widget_minimize">link</a> 
     <div class="widget_box_content_cont"> 
      some content 
     </div> 
    </div> 
    <div class="widget_box_content"> 
     <a href="#" class="widget_minimize">link 2</a> 
     <div class="widget_box_content_cont"> 
      some content 2 
     </div> 
    </div>  
</div> 

這也是更好,因爲你會不會使得Fx.Slide的新實例每次點擊都會引用已經附加到元素的類。

+0

謝謝你,這是更有效率 – Brant 2010-03-08 13:59:43