Autor | Zpráva | ||
---|---|---|---|
kopi Profil |
#1 · Zasláno: 5. 9. 2017, 21:34:48
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é? Hm>mm. |
||
kopi Profil |
#3 · Zasláno: 5. 9. 2017, 21:58:34
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 |
#4 · Zasláno: 5. 9. 2017, 22:08:39
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 |
#5 · Zasláno: 5. 9. 2017, 22:12:19
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 |
#6 · Zasláno: 6. 9. 2017, 01:05:53
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é. |
||
Časová prodleva: 6 let
|
0