Permalänk
Hedersmedlem

Matchningsproblem med javascript

Hej!

Sidan det gäller är http://www.varukorg.se/butik/att.asp Fipplar så smått och får det nästan att fungera som jag vill, så när som på en punkt.

Om man som synes väljer ex. id10, id11, id12, id13 och så vidare matchar det även mot id1 och valen för detta visas således. I koden står att finna

if ( txt.match(id1) ) { document.getElementById(id1).style.display = 'block'; }

och jag har på känn att det är ordet match som spökar. Hur får man det att fungera som med de 9-10 första valen?

Hoppas problemet är överskådligt!

Permalänk
Testpilot

Vet inte om jag hänger med riktigt men eftersom du har samma id som valen i listan borde väl den lättaste lösningen vara

txt = obj.options[obj.selectedIndex].value; document.getElementById(txt).style.display = 'block';

?

Och att skicka med varenda id till funktionen behövs inte, du kan använda document.getElementById('id-namn') för att komma åt ett element direkt.

Så här skulle jag ha skrivit funktionen:

function display(obj){ txt = obj.options[obj.selectedIndex].value; id_count = 13; for(i=1; i<=id_count; i++){ element = document.getElementById('g_'+i); if(txt == 'g_'+i){ element.style.display = 'block'; }else{ element.style.display = 'none'; } } }

och anropat den bara genom display(this) vid onchange.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Hedersmedlem

Det verkar defenitivt smidigare med någon form av loop än att skriva ut allt, men jag tror inte problemet ligger där. Problemet var att om jag väljer det som namngetts till ex. id11 så visas först det som visas om man väljer id1, men sen även de för id11. Så är det även för resterande tvåsiffriga id som börjar på 1. Det är som att den matchar id11 med id11 och id11 (för att "id1" ingår i "id11").

Jag är inte hemma och kan testa, men det kanske avhjälps med din något kompaktare kod. Får kika på det sen imorgon, du ska hur som helst ha stort tack. Jag återkommer om det inte funkar

Permalänk
Testpilot

Vill du använda din kod som du redan har kan du byta ut match mot vanliga jämförelser

if (txt == id1)){ document.getElementById(id1).style.display = 'block'; }

Eftersom både txt och id1 är textsträngar.

Jag har faktiskt redan testat koden i mitt tidigare inlägg så den funkar precis som din ursprungliga fast utan "buggen" då.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Hedersmedlem

Jo, det är klart det funkade. Stort tack, det ser betydligt mycket snyggare ut också