切换以打开/关闭选项卡式导航

时间:2014-01-23 13:12:34

标签: javascript jquery html

我是jQuery / Javascript的新手,并且一直尝试在页面加载时关闭选项卡式导航菜单,然后在用户点击时打开。到目前为止,我对编辑以下文件没有任何乐趣

function amshopby_start(){
    $$('.block-layered-nav .form-button').each(function (e){
        e.observe('click', amshopby_price_click_callback);
    });

    $$('.block-layered-nav .input-text').each(function (e){
        e.observe('focus', amshopby_price_focus_callback);
        e.observe('keypress', amshopby_price_click_callback);
    });

    $$('a.amshopby-more', 'a.amshopby-less').each(function (a){
        a.observe('click', amshopby_toggle);
    });

    $$('span.amshopby-plusminus').each(function (span){
        span.observe('click', amshopby_category_show);
    });

    $$('.block-layered-nav dt').each(function (dt){
        dt.observe('click', amshopby_filter_show);
    });

    $$('.block-layered-nav dt img').each(function (img){
        img.observe('mouseover', amshopby_tooltip_show);
        img.observe('mouseout', amshopby_tooltip_hide);
    });

    $$('.amshopby-slider-param').each(function (item) {
        param = item.value.split(',');
        amshopby_slider(param[0], param[1], param[2], param[3], param[4], param[5], param[6]);
    });
}

function amshopby_price_click_callback(evt) {

    if (evt && evt.type == 'keypress' && 13 != evt.keyCode)
        return;

    var prefix = 'amshopby-price';
    // from slider
    if (typeof(evt) == 'string'){
        prefix = evt;
    }
    else {
        var el = Event.findElement(evt, 'input');
        if (!Object.isElement(el)){
            el = Event.findElement(evt, 'button');
        }
        prefix = el.name;
    }

    var a = prefix + '-from';
    var b = prefix + '-to';

    var numFrom = amshopby_price_format($(a).value);
    var numTo   = amshopby_price_format($(b).value);

    if ((numFrom < 0.01 && numTo < 0.01) || numFrom < 0 || numTo < 0) {
        return;
    }

    var url =  $(prefix +'-url').value.gsub(a, numFrom).gsub(b, numTo);
    amshopby_set_location(url);
}

function amshopby_price_focus_callback(evt){
    var el = Event.findElement(evt, 'input');
    if (isNaN(parseFloat(el.value))){
        el.value = '';
    }
}


function amshopby_price_format(num){
    num = parseFloat(num);

    if (isNaN(num))
        num = 0;


    return Math.round(num);
}


function amshopby_slider(width, from, to, max_value, prefix, min_value, ratePP) {

    width = parseFloat(width);
    from = parseFloat(from);
    to = parseFloat(to);
    max_value = parseFloat(max_value);
    min_value = parseFloat(min_value);

    var slider = $(prefix);
    //      var allowedVals = new Array(11);
    //      for (var i=0; i<allowedVals.length; ++i){
    //          allowedVals[i] = Math.round(i * to /10);
    //      }
    return new Control.Slider(slider.select('.handle'), slider, {
        range: $R(0, width),
        sliderValue: [from, to],
        restricted: true,
        //values: allowedVals,

        onChange: function (values){
            this.onSlide(values);
            amshopby_price_click_callback(prefix);
        },
        onSlide: function(values) {

            var fromValue = Math.round(min_value + ratePP * values[0]);
            var toValue = Math.round(min_value + ratePP * values[1]);

            /*
             * Change current selection style
             */
            if ($(prefix + '-slider-bar')) {
                var barWidth = values[1] - values[0] - 1;
                if (values[1] == values[0]) {
                    barWidth = 0;
                }
                $(prefix + '-slider-bar').setStyle({
                    width : barWidth + 'px',
                    left : values[0] + 'px'
                });
            }


            if ($(prefix+'-from')) {
                $(prefix+'-from').value = fromValue;
                $(prefix+'-to').value   = toValue;
            }

            if ($(prefix + '-from-slider')) {
                $(prefix + '-from-slider').update(fromValue);
                $(prefix + '-to-slider').update(toValue);
            }
        }
    });

}

function amshopby_toggle(evt){
    var attr = Event.findElement(evt, 'a').id.substr(14);

    $$('.amshopby-attr-' + attr).invoke('toggle');

    $('amshopby-more-' + attr, 'amshopby-less-' + attr).invoke('toggle');

    Event.stop(evt);
    return false;
}

function amshopby_category_show(evt){
    var span = Event.findElement(evt, 'span');
    var id = span.id.substr(16);

    $$('.amshopby-cat-parentid-' + id).invoke('toggle');
    span.toggleClassName('minus');
    Event.stop(evt);

    return false;
}

function amshopby_filter_show(evt){
    var dt = Event.findElement(evt, 'dt');

    dt.next('dd').down('ol').toggle();
    dt.toggleClassName('amshopby-collapsed');

    Event.stop(evt);
    return true;
}

function amshopby_tooltip_show(evt){
    var img = Event.findElement(evt, 'img');
    var txt = img.alt;

    var tooltip = $(img.id + '-tooltip');
    if (!tooltip) {
        tooltip           = document.createElement('div');
        tooltip.className = 'amshopby-tooltip';
        tooltip.id        = img.id + '-tooltip';
        tooltip.innerHTML = img.alt;

        document.body.appendChild(tooltip);
    }

    var offset = Element.cumulativeOffset(img);
    tooltip.style.top  = offset[1] + 'px';
    tooltip.style.left = (offset[0] + 30) + 'px';
    tooltip.show();
}

function amshopby_tooltip_hide(evt){
    var img = Event.findElement(evt, 'img');
    var tooltip = $(img.id + '-tooltip');
    if (tooltip) {
        tooltip.hide();
    }
}

function amshopby_set_location(url){
    if (typeof amshopby_working != 'undefined'){
        return amshopby_ajax_request(url);
    }
    else {
        return setLocation(url);
    }
}


document.observe("dom:loaded", function() { amshopby_start(); });

我试图操作的元素包含在这个文件中

<?php if($this->canShowBlock()): ?>
<div class="block block-layered-nav">
    <div class="block-title">
        <strong><span><?php echo $this->__('Shop By') ?></span></strong>
    </div>
    <?php echo $this->getStateHtml() ?>
    <div class="block-content">
    <?php if($this->canShowOptions()): ?>
<!--            <p class="block-subtitle">--><?php //echo $this->__('Shopping Options') ?><!--</p>-->
                <ul id="narrow-by-list">
                    <li>
                    <?php $_filters = $this->getFilters() ?>
                    <?php foreach ($_filters as $_filter): ?>
                    <?php if($_filter->getItemsCount()): ?>
                        <div class="opt-row">
                        <dl class="opt-row">
                            <dt><?php echo $this->__($_filter->getName()) ?></dt>
                            <dd><?php echo $_filter->getHtml() ?></dd>
                        </dl>
                     </div>
                    <?php endif; ?>
                    <?php endforeach; ?>
                    </li>
                </ul>
            <script type="text/javascript">decorateDataList('narrow-by-list')</script>
    <?php endif; ?>
    <?php if ($this->getLayer()->getState()->getFilters()): ?>
        <div class="actions"><a href="<?php echo $this->getClearUrl() ?>"><?php echo $this->__('Clear All') ?></a></div>
    <?php endif; ?>
    </div>
</div>
<?php endif; ?>

当页面加载时,我想让选项卡式导航菜单关闭但是可以由用户打开...有人可以帮助吗?

1 个答案:

答案 0 :(得分:0)

在管理员面板中,您可以默认关闭任何过滤器: -

Catalog > Improved Navigation > Filters

选择相关过滤器并设置“折叠”&#39;到了&#39;是&#39;。