webForumDet fria alternativet

'a href' -->'form'

14 svar · 563 visningar · startad av bloSSA

bloSSAMedlem sedan sep. 2000116 inlägg
#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

@ndersMedlem sedan juni 200032 969 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...

bloSSAMedlem sedan sep. 2000116 inlägg
#3

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

/Anders

@ndersMedlem sedan juni 200032 969 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?)

bloSSAMedlem 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.

@ndersMedlem sedan juni 200032 969 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

bloSSAMedlem 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!

Erik JuhlinMedlem 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.

Erik JuhlinMedlem 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>
bloSSAMedlem 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...? ;-)

bloSSAMedlem 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?

@ndersMedlem sedan juni 200032 969 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

bloSSAMedlem 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

@ndersMedlem sedan juni 200032 969 inlägg
#14

Du kan använda valArr.length.

Mvh

Erik JuhlinMedlem 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! :)

137 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)