webForumDet fria alternativet

Visa dölj med bilder funkar inte (problem med if i onclick)

JavaScript

12 svar · 621 visningar · startad av wally_91

Medlem sedan feb. 2006511 inlägg
Frågan#1

Hej alla!

Jag har som sagt problem med en if-sats i en onclick.

När man trycker på den första bilden (+) ändras den till den andra bilden (-) men tvärtom funkar inte!

Använder följande kod:

<img src="images/plus.gif" alt="VISA/DÖLJ utökad användarinfo" 
onclick="if(this.src = 'images/plus.gif') this.src = 'images/minus.gif'; else this.src = 'images/plus.gif';" />

All hjälp uppskattas!

//wally_91

Medlem sedan juni 200032 967 inlägg
#2

Får du något javascriptfel?

Medlem sedan feb. 2006511 inlägg
#3

Fx klagar inte och IE är tystare än vanligt.

Medlem sedan juni 200032 967 inlägg
#4

Har du en url till sidan eller möjlighet att lägga upp ett (o-)fungerande exempel?

Medlem sedan feb. 2006511 inlägg
#5

Ja, varför inte?

http://www.guida.nu/nytt/visa_alla/index.html

Medlem sedan juni 200032 967 inlägg
#6

Släng fram en alert på this.src istället vid onclick - så får du se vad den innehåller. Min gissning är att den inte innehåller just images/plus.gif - utan hela sökvägen.

Medlem sedan feb. 2006511 inlägg
#7

Hur menar du?

Försökte själv men jag vet inte hur jag ska göra.

Medlem sedan mars 200741 inlägg
#8

Har för mig this.src vill ha hela sökvägen. Vill man jobba med relativa länkar i koden får man addera en bas-url + relativ url.

Medlem sedan aug. 20039 340 inlägg
#9

Felet du gör ligger i if-satsen:

if(this.src = 'images/plus.gif')

Dels kan du inte använda ett enkelt = för jämförelse, dels så kan du inte jämföra this.src med den relative sökvägen, då this.srv innehåller den fulla sökvägen.
Det första problemet innebär att först körs this.src = 'images/plus.gif', och this.src får värdet 'images/plus.gif'. Sedan skickas uttryckets värde ('images/plus.gif') till if-satsen. Denna tycker att värdet är sant eftersom det är en sträng som inte är tom. Sedan sätts this.src till images/plus.gif.
Om det bara vore för det felet så skulle du bara kunna byta ut = till ==. Dock så fanns det ju ett fel till. För det rekommenderar jag en annan approach för jämförelsen, nämligen en regexp. Jag rekommenderar följande kod:

<img src="images/plus.gif" alt="VISA/DÖLJ utökad användarinfo" 
onclick="if(/plus.gif$/.test(this.src)) this.src = 'images/minus.gif'; else this.src = 'images/plus.gif';" />

Den koden testar om src slutar med plus.gif.
(. betyder något speciellt dock, punkten matchar nämligen vilket tecken som helst, så även en fil vid namn plusxgif eller plus3gif räknas som sant i if-satsen. Dock lär det inte ställa till med några problem för dig.)

Medlem sedan juni 200032 967 inlägg
#10

nitro2k01 skrev:

Dels kan du inte använda ett enkelt = för jämförelse

argh - att jag inte såg det!

Medlem sedan feb. 2006511 inlägg
#11

nitro2k01 skrev:

Felet du gör ligger i if-satsen:

if(this.src = 'images/plus.gif')

Dels kan du inte använda ett enkelt = för jämförelse, dels så kan du inte jämföra this.src med den relative sökvägen, då this.srv innehåller den fulla sökvägen.

Jag såg det också, uppdaterade dock aldrig mitt inlägg... Hmm undra varför? :q
I alla fall, om jag hade två = vid jämförelsen ändrades inget överhuvud taget. Det måste ha och göra med att src tar ut hela sökvägen. Ditt svar funkade i alla fall och jag är otroligt glad för det! TACK! :birp

TACK alla andra som hjälpte mig också! :bire

Medlem sedan aug. 20039 340 inlägg
#12

wally_91 skrev:

I alla fall, om jag hade två = vid jämförelsen ändrades inget överhuvud taget. Det måste ha och göra med att src tar ut hela sökvägen.

Exakt. Läste du ens mitt inlägg, eller kopierade du bara koden?

Medlem sedan feb. 2006511 inlägg
#13

nitro2k01 skrev:

Exakt. Läste du ens mitt inlägg, eller kopierade du bara koden?

Både och! :D

268 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)