webForumDet fria alternativet

Använda select-värden för att skapa ny input

PHP

43 svar · 1 791 visningar · startad av Sanji

Medlem sedan juli 2009355 inlägg
Frågan#1

Hej! jag håller på och kodar en sida där man gör servicebokningar på motorcyklar.

länk: http://www.actionsports.se/service2/

nu är det så att då man väljer övriga modeller i listan för välj modell så vill jag att ytterligare en input-ruta ska komma fram. I den rutan ska man kunna skriva in sin modell så denna sparas till databasen. jag vet hur jag skriver koden för att spara ner det man skriver in, men det jag inte vet är hur jag får rutan att skapas precis då man väljer övriga modeller.

Jag gissar på att man använder sig av en if-sats, men hur hämtar jag värdet ur select-satsen så jag kan kolla det med if-satsen?

som sagt, jag vill att input-fönstret ska komma fram precis då man valt övriga modeller.

MVH. Marcus

Medlem sedan feb. 20034 441 inlägg
#2

Du skriver ut din "modelllista" med Ajax, så det du måste göra är att lägga till ett undantag i funktionen getModellerList(this.value), som kollar att om värdet = 6 (Övriga modeller) så ska ajaxkoden inte köras. Du kan t.ex. köra ett hiddenfält som ändras till typen "text" då värdet är 6.

Den här tråden bör nog flyttas till Javascript, eftersom det inte har med PHP att göra.

Medlem sedan juli 2009355 inlägg
#3

jo det stämmer, men jag använder mig av en hel del php också

Medlem sedan feb. 20034 441 inlägg
#4

Sanji skrev:

jo det stämmer, men jag använder mig av en hel del php också

Jo, men återigen så bör du lösa det här med Javascript, eftersom du "ropar" på funktionen och skriver ut värden via Ajax/Php.

Har du sökt på t.ex. "Create dynamic input?

Medlem sedan juli 2009355 inlägg
#5

Jag ska ta och söka runt lite, så återkommer jag med min lösning, eller om jag behöver mer hjälp :)

Medlem sedan juli 2009355 inlägg
#6

kan man göra så här?

V&auml;lj modell<br>
            <select name="getModeller" id="q1" onChange="valjModell(this.value);newInput();">
            <option value="ejvalt">V&auml;lj modell i listan</option>
            <?PHP                             
			$sql = "SELECT * FROM do_motorcykelmodeller WHERE mmtillverkare = " . $_POST['hidmarkeid'];
			$rs = mysql_query($sql);
			while( $r = mysql_fetch_array($rs)){
				?>
				<option value="<?PHP echo $r['doid']; ?>" <?PHP if($_POST['hidmodellid'] == $r['doid']){ echo "selected"; } ?>><?PHP echo $r['beteckning']; ?> </option>
				<?PHP
			}
            ?>
            </select>

<script language="Javascript"> 
function newInput() { 
q1 = document.getElementById("q1").value; 
 

if q1 == "annan modell"
{
document.write("<input type=\"text\" name=\"hidinput\" />");
}

} 
</script>
Medlem sedan juli 2009355 inlägg
#7

den extra input-rutan vill inte visa sig... någon som kan vägleda mig till vad som är fel?

Medlem sedan juli 2009355 inlägg
#8

såg vissa fel... har nu lagt till:

var q1
(parentes runt if-satsens villkor)
har även bytt document.write till innerHTML och en div-tag.

jag har fortfarande samma problem.

Medlem sedan feb. 20034 441 inlägg
#9

jag hade nog skrivit ut det extra fältet så att det _alltid_ ligger där, men visa/dölja det beroende på vald item i selectlistan.

Förstår du hur jag menar?

Medlem sedan juli 2009355 inlägg
#10

du menar att växla mellan type="hidden" och type="text" ?

Medlem sedan juli 2009355 inlägg
#11

jag vet inte riktigt vad det är jag gör för fel, jag lyckas helt enkelt inte att få fram den där input-boxen. inte ens när jag lägger den helt synlig utan något speciellt, precis som vilken input-box som helst så funkar det.

Edit* det kan nog ha att göra med var jag lägger den. jag testade att flytta ner koden en bit, och då visas den.

Medlem sedan feb. 20034 441 inlägg
#12

Sanji skrev:

du menar att växla mellan type="hidden" och type="text" ?

Nej, det är inte så jag menar. Kan återkomma om ett par timmar med exempel, sitter på jobbet nu.

Medlem sedan juli 2009355 inlägg
#13

okej, tack :)

Medlem sedan feb. 20034 441 inlägg
#14

T.ex. såhär kan man göra:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<html>
<head>
<title> new document </title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="editplus">
<meta name="author" content="">
<meta name="keywords" content="">
<meta name="description" content="">

<script type="text/javascript">
//<!--
function showField(list){
	var sel = list.options[list.selectedIndex].value;
	if(sel == 3){
		showLayer('theField');
	}else{
		hideLayer('theField');
	}
}

function postForm(theForm){
	var f = theForm;
	if(f.mySelect.options[f.mySelect.selectedIndex].value == 3){
		alert("Du valde en annan modell: " + f.myField.value);

	}else{
		alert("Här händer något annat\n");
	}
	return false;
}

function showLayer(id) {
  var lyr = getElemRefs(id);
  if (lyr && lyr.css) lyr.css.display = "block";
}

function hideLayer(id) {
  var lyr = getElemRefs(id);
  if (lyr && lyr.css) lyr.css.display = "none";
}

function getElemRefs(id) {
	var el = (document.getElementById)? document.getElementById(id): (document.all)? document.all[id]: (document.layers)? document.layers[id]: null;
	if (el) el.css = (el.style)? el.style: el;
	return el;
}
//-->
</script>

</head>

<body>

<form method="post" onsubmit="return postForm(this);">
<div style="width: 200px; float: left;">
<p>Välj modell<br />
<select name="mySelect" onchange="showField(this);">
<option value="0">-- välj --</option>
<option value="1">Honda</option>
<option value="2">Suzuki</option>
<option value="3">Något annat</option>
</select></p>
</div>
<div id="theField" style="display: none; width: 200px; float: left;">
	<p>Ange något annat<br />
	<input type="text" name="myField" /></p>
</div>
<input type="submit" value="Spara" />
</form>
</body>
</html>
Medlem sedan juli 2009355 inlägg
#15

oj oj vad du har grejjat! tack för all hjälp, nu ska jag försöka göra ordning på min egna sida... återkommer snart med resultat!

Medlem sedan juli 2009355 inlägg
#16

jag kan köra så här va?

onchange="blabla();showField(this);"
Medlem sedan feb. 20034 441 inlägg
#17

Sanji skrev:

jag kan köra så här va?

Prova!

Men varför ska du göra så? Gör istället så att din ajaxkod körs "ifrån" funktionen
showField();.

Medlem sedan juli 2009355 inlägg
#18

tidigare så har alla "value"-värden på <option></option> varit modellens id. jag kan väl fortsätta med det, if(sel == 117).

list.options, där är "list" namnet på select-satsen va?

ursäkta mig att jag ställer dumma frågor :(

Medlem sedan juli 2009355 inlägg
#19

btw,

list.options[list.selectedIndex].value;

detta hämtar det värde man angett i:<option value=""></option> om jag har rätt.

jag har slängt ihop lite nu, men jag lyckas inte få min dolda div-tagg att bli synlig. däremot om jag gör den till "block" som default, så syns den ända tills man börjar välja saker i listan. det måste ju betyda att vad jag än gör så går if-satsen i showField alltid till else vad jag än väljer.

jag ska försöka hitta vad jag gör för fel.

Medlem sedan feb. 20034 441 inlägg
#20

Du måste posta mer kod här om jag (eller någon annan) ska kunna hjälpa dig. Posta allt relaterat till det här problemet, dvs. htmlkod + javascript.

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)