Autor Zpráva
kopi
Profil
Dobrý den,
mám tento js script.

$.fn.madCustomSelect = function () {

    return this.each(function(){

        var list = $(this).children('ul'),
            select = $(this).find('select'),
            title = $(this).find('.select-title');
     

        // select items to list items

        if($(this).find('[data-filter]').length){
            for(var i = 0,len = select.children('option').length;i < len;i++){
                list.append('<li data-filter="'+select.children('option').eq(i).data('filter')+'">'+select.children('option').eq(i).text()+'</li>')
            }
        }
        else{
            for(var i = 0,len = select.children('option').length;i < len;i++){
                list.append('<li>'+select.children('option').eq(i).text()+'</li>')
            }
        }
        select.hide();

        // open list
        
        title.on('click',function(){
            list.slideToggle(400);
            $(this).toggleClass('active');
        });

        // selected option

        list.on('click','li',function(){
            var val = $(this).text();
            title.text(val);
            list.slideUp(400);
            select.val(val);
            title.toggleClass('active');
            return false;
        });

    });

}

Tady na foru mi bylo vysvětleno, že skript předpokládá, že value v option je stejná jako text option. Javascriptu bohužel nerozumím a nedokázu sám skript upravit tak, aby nebyla ignorovaná value v option.

Děkuji za pomoc s upravením kodu.
Tomášeek
Profil
kopi:
Kolikáté to už je vlákno řešící tvůj jeden problém? Třetí? Čtvrté? Hmmm.
kopi
Profil
jednou jsem to blbě zduplikoval, ale původně to bylo v sekci HTML, tak jsem myslel, že ted je relevantní to dát do sekce JS. Každopádně předtím mi všichni napsali, že ten kod je špatně, což už vím taky, ale nikdo mi neporadil, jak to upravit. Tak to ještě naposledy zkouším zde..
Tomášeek
Profil
kopi:
Radu a vyjmenované konkrétní řádky jsi dostal. Ty ale radu nepotřebuješ (= nevíš, jak s ní naložit, nehledě na kategorii, ve které to je umístěné), chceš, aby ti někdo opravil za tebe. Jednak na to nikdo nemá náladu (= ten JS vyhoď a nech obyčejný select), druhak jsi neukázal dotčené HTML (ukázku toho, jak to teď ne/funguje).
kopi
Profil
Tomášeek:
to máš pravdu, že s tou radou neumím naložit, protože js neumím, proto jsem žádal o radu tady, domníval jsem se, že to bude jen upravení zmiňovaných řádků. Pokud to vyžaduje větší úpravy, tak ani neočekávám, že by mi to tady někdo napsal. Nevím, jak bych tu měl ukázat nefunkční ukázku, prostě pokud je option value jiná než text option, tak se value neodešle ve formuláři. Tak já to dám pryč a selecty si nastyluju
Keeehi
Profil
Tohle každé té položce seznamu přidá do atributu data-value originální value ze selectu.
        if($(this).find('[data-filter]').length){
            for(var i = 0,len = select.children('option').length;i < len;i++){
                list.append('<li data-value="'+select.children('option').eq(i).val()+'" data-filter="'+select.children('option').eq(i).data('filter')+'">'+select.children('option').eq(i).text()+'</li>')
            }
        }
        else{
            for(var i = 0,len = select.children('option').length;i < len;i++){
                list.append('<li data-value="'+select.children('option').eq(i).val()+'">'+select.children('option').eq(i).text()+'</li>')
            }
        }

Pak ten událost poslouchající na kliknutí by měla stačit upravit, aby brala data právě odtud místo jen prostého textu.
        list.on('click','li',function(){
            var val = $(this).data('value');
            ...

Snad jsem to trefil dobře. Když tak si s tím můžeš trochu pohrát, ale idea je za tím snad jasná - uložit si kromě textu i hodnotu a později použít právě tu, ne ten text.


Obávám se ale, že toto zkrášlovátko bude mít i spoustu dalších problémů. Rád bych ti doporučil nějaké jiné, ale zatím jsem nenarazil na žádné, které by bylo bez chyb. Ono ač se to nezdá, tak formulářové prvky jsou neskutečně komplextní a je extrémě složité vytvořit kopii, která by uměla úplně to samé.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: