Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: select box - przycina za każdym razem podczas wczytywania
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Mateusz_M
Witam, w wyszukiwarce umieściłem rozwijaną opcje przeszukiwanych zasobów strony. Problem w tym, że co przeładowywuje stronę to jest taki efekt:

http://youtu.be/vhyGWv8C284

jest to bardzo denerwujące... czy jest jakaś możliwość zapobiec temu ?

Kod
/*
*      styleSelect - apply style to a select box
*   (http://www.8stream.com)
*
*      Copyright (c) 2009 Siim Sindonen, 8STREAM <siim@8stream.com>
*   Dual licensed under the MIT and GPL licenses:
*   http://www.opensource.org/licenses/mit-license.php
*   http://www.gnu.org/licenses/gpl.html
*
*   Requires jQuery version: >= 1.3.2
*      $Version: 1.2.3 | 22.09.2009
*/

(function($){

    $.fn.styleSelect = function(options){
        
        var tabindex = 1;
        
        var opts = $.extend({}, $.fn.styleSelect.defaults , options);
        
        //set tabindex        
        $('input,select,textarea,button').each(function() {
            
            var input = $(this);
                
            if (!input.attr('tabindex')){
                
                input.attr('tabindex', tabindex);
                tabindex++;
                
            }
        });
        
        return this.each(function(){

            mainSelect = $(this);
            var mainId = mainSelect.attr('name');
            
            var styledTabIndex = mainSelect.attr('tabindex');
            
            var date = new Date;
            var selectId = 'selectbox_'+mainId+date.getTime();
            
            //Hidde select box
            mainSelect.hide();
    
            //Main container
            var mainContainer = $('<div tabindex="'+styledTabIndex+'"></div>').css({position : 'relative'})
                    .addClass(opts.styleClass)
                    .attr('id', selectId)
                    .insertBefore(mainSelect);
            
            //Options container
            var subContainer = $('<ul></ul>').css({'position' : 'absolute', 'z-index' : '100'-styledTabIndex, 'top' : opts.optionsTop, 'left' : opts.optionsLeft})
                    .appendTo($(mainContainer))
                    .hide();
                
            //Generate options list
            var optionsList = "";
            
            mainSelect.find('option').each(function(){
            
                optionsList += '<li id="'+$(this).val()+'"';
                if($(this).attr('class')) optionsList += ' class="'+$(this).attr('class')+'" ';
                optionsList += '>';
                optionsList += '<span style="display: block;"';
                if ($(this).attr('selected')) optionsList += ' class="selected" ';
                optionsList += '>';
                optionsList += $(this).text();
                optionsList += '</span>';
                optionsList += '</li>';
                
            });

                subContainer.append(optionsList);
                
                checkSelected(opts.styleClass,opts.optionsWidth);
            
            //Delete border on click
            $('#'+selectId).focus(function(){
                $(this).blur();
            });
            
            //Show otions
            $('#'+selectId).click(function(){
                $(this).find('ul').slideToggle(opts.speed);
            });
            
            //On click
            $('#'+selectId+' li').click(function(){
                doSelection($(this));
            });
            
            //Keyboard support
            $('#'+selectId).keydown(function(event){
                
                var active = $(this).find('.selected').parent();
                
                if (event.keyCode == 40 || event.keyCode == 39 ){ doSelection(active.next()); }
                if (event.keyCode == 37 || event.keyCode == 38 ){ doSelection(active.prev()); }
                
                if (event.keyCode == 13 || event.keyCode == 0){ $(this).find('ul').slideToggle(opts.speed); }
                if (event.keyCode == 9){ $(this).find('ul').hide(opts.speed); }
                
            });
            
            //Do selection
            var doSelection = function(item){
                
                item.siblings().find("span").removeClass('selected');
                item.find("span").addClass('selected');
        
                var selectedItem = item.attr('id');

                var realSelector = $('select[name="'+mainId+'"]');
                realSelector.siblings().selected = false;
                realSelector.find('option[value="'+selectedItem+'"]').attr('selected','selected');
                realSelector.trigger(opts.selectTrigger);
        
                checkSelected(opts.styleClass,opts.optionsWidth);
            
            }
            
            $('#'+selectId).click(function(e) {
                e.stopPropagation();
            });
            
            $(document).click(function() {
                $('#'+selectId+' ul').hide();
            });
            
            });    
        }
        
        //Selected items check
        function checkSelected(mainClass,mainWidth){
                
                $('.'+mainClass).each(function(){
                
                    var elementList = $(this).find('ul');
                    
                    $(this).find('span').each(function(){
                    
                        var spanClass = $(this).attr("class");
                        if (spanClass == "passiveSelect" || spanClass == "activeSelect") $(this).remove();
                    
                    });
                    
                    var selectedName = $(this).find('.selected');
                    
                    $('<span></span>').text(selectedName.text())
                            .attr('id', selectedName.parent().attr('id'))
                            .addClass('passiveSelect')
                            .appendTo($(this));
                    
                    if (mainWidth === 0){
                        $(this).css({'width' :  elementList.width()});
                    }
                    
                });
                
                $('.'+mainClass+' span').each(function(){
                    if ($(this).attr('id')){
                        $(this).removeClass();
                        $(this).addClass('activeSelect');
                    }
                });
        }    
    
        $.fn.styleSelect.defaults = {
        
            optionsTop: '26px',
            optionsLeft: '0px',
            optionsWidth: 0,
            styleClass: 'selectMenu',
            speed: 0,
            selectTrigger: 'change'
            
        };
    
})(jQuery);
Rewil
Daj link do strony, bo to problem wyświetlania, nie teoryzowania na temat kodu.
Mateusz_M
Niestety nie mogę podać linka strona jeszcze nie jest publicznie dostępna. Może jakieś wskazówki co może być przyczyną? ewentualnie jakaś zasada jest jak obchodzić się w takiej syutacji.
Rewil
Strona działa bez JS'a?
Bo jeżeli nie, to możesz tego selecta ukryć CSS'em.

Jeżeli tak, to podmień może:
Cytat
(function($){

na:
Cytat
$(document).ready(function() {


lub ew. do tego ready, wczytuj funkcje które mają się dziać po załadowaniu strony.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.