webForumDet fria alternativet
Logga in / Bli medlem

'a href' -->'form'

JavaScript

14 svar · 563 visningar · startad av bloSSA

Medlem sedan sep. 2000116 inlägg
Trådstart#1

Jag skulle vilja göra om en 'a href'-länk till ett javascript till att när man väljer en 'option' i ett formulär så ska formulärsdatan skickas till javascriptet.

Javascriptet:

<script language="javascript" type="text/javascript">
var lastID = \'\';
var lastGender = \'\';
var lastZ = \'\';
function memClick (id, gender, z)
{
	if (lastID)
	{
		lastID.src = \'katalog/maps/\' + lastGender + \'pin.gif\';
		lastID.style.zIndex = lastZ;
	}

	id.src = \'katalog/maps/\' + gender + \'pin_on.gif\';
	id.style.zIndex = 9999; // make sure the z-index is high enough to see

	// update to turn image to off next time
	lastID = id;
	lastGender = gender;
	lastZ = z;
}
</script>

Här är koden på hemsidan idag:

<a href="java script:memClick(document.images.p1,0">jocke</a>
<a href="java script:memClick(document.images.p2,0">anna</a>
<a href="java script:memClick(document.images.p3,0">pelle</a>
<a href="java script:memClick(document.images.p3,0,1">per</a>

Och här är det jag försökt att få att fungera:

<form method="post" name="images">
	<select name="p" style="font-size: 7pt;" size="30" 
onchange="submit.memClick(document.images.p.options[this.selectedIndex].value);">
<option value="1, 0">jocke</option>
<option value="2, 0">anna</option>
<option value="3, 0">pelle</option>
<option value="3, 0, 1">per</option>
</select></form>

Jag tycker att jag har testat de flesta varianter jag hittat på nätet, men ingen har varit i närheten av att fungera så jag antar att jag missat något fundamentalt(?). Kan tillägga att jag e totalt nollad vad gäller javascript... ;)

Tacksam för tips!
/Anders

Medlem sedan juni 200032 967 inlägg
#2

Kan du inte visa koden som skickas till webbläsaren istället för koden där javascript och formulär genereras? Vi har ju ingen aning om innehållet i dina hemska php-variabler och läskiga objekt...

Medlem sedan sep. 2000116 inlägg
#3

:r
Jag har städat mitt första inlägg nu. *sorry*

/Anders

Medlem sedan juni 200032 967 inlägg
#4

Du har kvar lite $settings['default_images_url'] i första delen fortfarande. (och spontant känns just de raderna felaktiga. Vad är det tänkt att du ska göra där?)

Medlem sedan sep. 2000116 inlägg
#5

Har ändrat i javascriptet i mitt första inlägg, jag hoppas att jag har rätt på alla fnurpar å duttar. :-)
Javascriptet i sej funkar annars, det har jag inte rört.

Det som ska ske är att en gif-bild ska bytas mot en annan när man valt ett namn. Det finns många namn och det finns många små gif-bilder. Varje gif-bild representerar ett namn. När man valt ett namn ska föregående valt namns gif återställas.

Medlem sedan juni 200032 967 inlägg
#6

Eftersom det är lite olika parametrar som ska skickas med hade jag antagligen gjort något sånt här:

<form method="post" name="images">
	<select name="p" style="font-size: 7pt;" size="30" onchange="doMemClick(this.value);">
<option value="jocke">jocke</option>
<option value="anna">anna</option>
<option value="pelle">pelle</option>
<option value="per">per</option>
</select></form>

Och så klart javascriptfunktionen som ropar på memClick():

function doMemClick(user) {
     if (user=="jocke")
          memClick(document.images.p1,0);
     if (user=="anna")
          memClick(document.images.p2,0);
     if (user=="pelle")
          memClick(document.images.p3,0);
     if (user=="per")
          memClick(document.images.p3,0,1);
}

Det går nog att göra på något finare sätt, men håll till godo tills något av proffsen dyker upp med något läckert! ;)

Mvh

Medlem sedan sep. 2000116 inlägg
#7

Ok, ska testa det. Jäkligt smart å skapa en funktion tycker jag!!

Då jag kör med loopar så kommer jag dock att ändra value, men det är en baggis.

Tackar, tackar!

Medlem sedan maj 200010 687 inlägg
#8

Skulle bara vilja påpeka att this.value inte är så vettigt att använda. Den propertyn finns egentligen inte. Det är bara ett Internet Explorer påhitt. Kör med: this.options[this.selectedIndex].value istället.

Medlem sedan maj 200010 687 inlägg
#9

Så här hade dock jag skrivit. If-satser känns inte hållbart i längden.

<script language="javascript" type="text/javascript">
var lastID = '';
var lastGender = '';
var lastZ = '';
function memClick(id, gender, z)
{
	if (lastID)
	{
		lastID.src = 'katalog/maps/' + lastGender + 'pin.gif';
		lastID.style.zIndex = lastZ;
	}

	id.src = 'katalog/maps/' + gender + 'pin_on.gif';
	id.style.zIndex = 9999; // make sure the z-index is high enough to see

	// update to turn image to off next time
	lastID = id;
	lastGender = gender;
	lastZ = z;
}

function doMemClick(val)
{
	var valArr = val.split();
	var img = document.images["p" + valArr[0]];
	
	memClick(img, valArr[1], valArr[2]);
}
</script>

<form method="post" name="images">
<select name="p" style="font-size: 7pt;" size="30" 
onchange="doMemClick(this.options[this.selectedIndex].value);">
<option value="1,0">jocke</option>
<option value="2,0">anna</option>
<option value="3,0">pelle</option>
<option value="3,0,1">per</option>
</select>
</form>
Medlem sedan sep. 2000116 inlägg
#10

Det där sista ser smidigt ut, så vill jag ha det. :-)

Det funkar dock inte. Jag testade även att ändra splitten till

val.split(",")

Jag har testat med Opera och Mozilla. I Opera är det första felmeddelandet jag får:

Event thread: onchange
Error:
name: ReferenceError
message: Statement on line 1: Reference to undefined variable: No such variable 'doMemClick'
Backtrace:
  In unknown script
    doMemClick(this.value);
  At unknown location
    {event handler trampoline}

Och detta betyder...? ;-)

Medlem sedan sep. 2000116 inlägg
#11

Upps! fel log. Har aldrig använt javaloggen tidigare... :-)

Det verkar nästan funka. det som blir fel är:

Event thread: onchange
Error:
name: TypeError
message: Statement on line 13: Expression evaluated to null or undefined and is not convertible to Object: id
Backtrace:
  Line 13 of inline#3 script in [url]http://192.168.1.100/anders/smf/index.php?action=mm[/url]
    id.src = "http://192.168.1.100/anders/smf/Themes/default/images/maps/" + gender + "pin_on.gif";
  Line 26 of inline#3 script in [url]http://192.168.1.100/anders/smf/index.php?action=mm[/url]
   memClick(img, valArr[1], valArr[2]);
  In unknown script
    doMemClick(this.options[this.selectedIndex].value);
  At unknown location
    {event handler trampoline}

Värdet av gender blir inte insatt. Hur får jag reda på vad de olika variablerna e/blir satta till?

Medlem sedan juni 200032 967 inlägg
#12

Erik Juhlin skrev:

Skulle bara vilja påpeka att this.value inte är så vettigt att använda. Den propertyn finns egentligen inte. Det är bara ett Internet Explorer påhitt. Kör med: this.options[this.selectedIndex].value istället.

Ok. this.value fungerar dock fint i FF också, därför valde jag det, då det är mycket kortare att skriva. :)

Jag håller dock med om att det är snyggare med split().

Problemet är kanske att valArr[2] inte alltid finns, och därför blir det fel?

mvh

Medlem sedan sep. 2000116 inlägg
#13

Kanske det, isf behöver jag en if-sats som kollar storleken på valArr, dvs hur många delar det blev när jag splittat. Finns det typ 'sizeof' på någe smidigt sätt?

/Anders

Medlem sedan juni 200032 967 inlägg
#14

Du kan använda valArr.length.

Mvh

Medlem sedan maj 200010 687 inlägg
#15

valArr[2] blir null om det inte finns...
Så i memClick kan du bara kolla om gender == null. :)

Kommatecknet i split hade jag missat. Bra att du såg det! :)

274 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)