jQuery使用wrapInner滑动,然后在完成后删除

时间:2013-08-04 18:16:54

标签: jquery firefox cross-browser fieldset

在jquery中使用向上/向下滑动功能时,我遇到了Firefox错误(overflow property not implemented on fieldset)。

所以我想:

  1. 点击
  2. 通过jquery添加内部div
  3. 向上/向下滑动此div
  4. 删除内部div
  5. 这是我到目前为止所做的:

    var $searchBtn = $form.find('.search-reveal');          
    $searchBtn.click(function(e){               
        var $this = $(this),
            $fieldset = $this.next();
    
        $this.toggleClass('open');
    
        // FIX Firefox bug - https://bugzilla.mozilla.org/show_bug.cgi?id=261037
        var $fieldsetInner = $fieldset.children().eq(0)
        if(!$fieldsetInner.is("div")){
            $fieldsetInner = $fieldset.innerWrap("<div></div>");
        }
    
        if($this.hasClass('open')){
            $fieldset.addClass('open');
            $form.addClass('active');
            $fieldsetInner.slideDown('fast', 'easeInQuad', function(){
                // REMOVE Firefox bug fix
            });
        } else {
            $fieldsetInner.slideUp('fast', 'easeOutQuad', function(){
                $fieldset.removeClass('open');
                $form.removeClass('active');
                // REMOVE Firefox bug fix
            });
        }
    
        e.preventDefault();
    });
    

    我已尝试this建议使用display: table-column进行修复,但这没有任何区别。

1 个答案:

答案 0 :(得分:2)

我写了一个独立的jQuery函数来执行此操作:

$.fn.fieldsetSlideToggle = function (speed) {
    var $this = $(this),
        $inner = $this.children().eq(0),
        display = $this.css('display'),
        slideSpeed = speed ? speed : 'fast';

    // 1. Check if first child of fieldset is <div>
    // 2. Wrap contents in <div> if not
    if (!$inner.is("div")) {
        $inner = $('<div />').html($this.html());
        $this.empty().append($inner);
    }

    // 3. SlideToggle on div
    if (display == 'none') {
        $this.show();
        $inner.hide().slideDown(slideSpeed, function () {
            $this.html($inner.html());
        });
    } else {
        $inner.slideUp(slideSpeed, function () {
            $this.html($inner.html()).hide();
        });
    }
}

小提琴:http://jsfiddle.net/tbDRu/6/。单击按钮以向上/向下滑动字段集。