webForumDet fria alternativet

Hur skapar man en dynamisk formulärkontrollfunktion?

3 svar · 646 visningar · startad av sabbacus

sabbacusMedlem sedan juli 2002630 inlägg
#1

Tja.
Jag har följande HTML-kod:
<form action="start.php?module={$module_id}&add=entry" method="post" onsubmit="checkSubmit(this.form)">
<div>
rubrik
<br />
<input type="text" name="headline" value="" class="spp_mod_guestbook_form" onclick="init( this )" />
<br />

				meddelande
				\<br /\>
				\<textarea name="message" class="spp_mod_guestbook_form" rows="" cols="" onclick="init( this )" \>\</textarea\>
				\<br /\>
			
				namn
				\<br /\>
				\<input type="text" name="author" value="" class="spp_mod_guestbook_form" onclick="init( this )" /\>
				\<br /\>
			
				email
				\<br /\>
				\<input type="text" name="email" value="" class="spp_mod_guestbook_form" onclick="init( this )" /\>
				\<br /\>
			
				webbadress
				\<br /\>
				\<input type="text" name="url" value="" class="spp_mod_guestbook_form" onclick="init( this )" /\>
				\<br /\>
			
				\<br /\>
				\<input type="submit" name="submit" value="Posta inlägg" class="spp_mod_guestbook_form" /\>
			\</div\>
		\</form\>

och följande javascriptskod:
function checkSubmit( form )
{
alert("checkSubmit");

var headline = document.forms\[0\].headline.value;
var message = document.forms\[0\].message.value;
var author = document.forms\[0\].author.value;
var email = document.forms\[0\].email.value;
var url = document.forms\[0\].url.value;

if ( headline == "rubrik..." )
{
	document.forms\[0\].headline.value = "";
}

if ( message == "meddelande..." )
{
	document.forms\[0\].message.value = "";
}

if ( author == "ditt namn..." )
{
	document.forms\[0\].author.value = "";
}

if ( email == "e-post..." )
{
	document.forms\[0\].email.value = "";
}

if ( url == "webbadress..." \|\| url == "http://" )
{
	document.forms\[0\].url.value = "";
}

}

function initForm( form )
{
alert("initform");
document.forms[0].headline.value = "rubrik...";

document.forms\[0\].message.value = "meddelande...";

document.forms\[0\].author.value = "ditt namn...";

document.forms\[0\].email.value = "e-post...";

document.forms\[0\].url.value = "webbadress...";

}

function init( input_name )
{
alert("init " + input_name.name + "..."+ input_name.value + "...");
var _name = input_name.name;

if ( input_name.name == "url" )
{
	document.forms\[0\].url.value = "http://";
}
/\*else 
{
	document.forms\[0\].input_name.name.value = "";
}\*/

}

Mitt problem ligger i funktionen init(). Det jag vill ha gjort är
"när någon klickar i fältet 'url' ska texten ändras till 'http://' medan alla andra fält ska nollställas".
Att få 'url' till att få 'http://' är inga problem, att få de andra fälten att nollställas är däremot mitt problem.
Ok, jag kan göra fem olika funktioner, men hur kul är det? DEt hade iofs gått snabbare äna att sitta och försöka lösa det här problemet men då lär man sig inget.

Mitt problem gestaltar sig i att jag inte kan få namnet på <input>/<textarea>-fältet att dynamiskt infinna sig i javaskriptfunktionen. När jag använder fältets tiktiga namn går det bra men jag vill alltså slänga in ett variabelt namn där det står "input_name.name" och "url" i javaskriptsfunktionen init(). Hur gör jag detta?

Tackar på förhand.
/M

jupitersMedlem sedan sep. 2002104 inlägg
#2

Det går nog att lösa!
Jag fattar bara inte riktigt vad du vill?

"Det jag vill ha gjort är
när någon klickar i fältet 'url' ska texten ändras till 'http://' medan alla andra fält ska nollställas".

Att nollställa alla andra fält är väl inget problem!

är ju bara att skriva:
document.forms[0].email.value="";
document.forms[0].author.value="";
osv...

...men något säger mig att det inte var detta du menade...

en närmare förklaring skulle vara på sin plats!!

sabbacusMedlem sedan juli 2002630 inlägg
#3

jupiters skrev:

Det går nog att lösa!
Jag fattar bara inte riktigt vad du vill?

"Det jag vill ha gjort är
när någon klickar i fältet 'url' ska texten ändras till 'http://' medan alla andra fält ska nollställas".

Att nollställa alla andra fält är väl inget problem!

är ju bara att skriva:
document.forms[0].email.value="";
document.forms[0].author.value="";
osv...

...men något säger mig att det inte var detta du menade...

en närmare förklaring skulle vara på sin plats!!

Alltså, jag vill inte att alla fält ska nollställas när man klickar på ett fält. Jag vill att endast det "klickade" fältet ska nollställas, med undantag för URL-fältet som inte ska nollställas utan få texten "http://" istället ( för att folk ska fatta att dom ska ska ha med det, även om php:n inkluderar det om det saknas).

jupitersMedlem sedan sep. 2002104 inlägg
#4

Har kommit på vad som var fel!

function init( input_name )
{
alert("init " + input_name.name + "..."+ input_name.value + "...");
var _name = input_name.name;

if ( input_name.name == "url" )
{
document.forms[0].url.value = "http://";
}
/*else
{
document.forms[0].input_name.name.value = "";
}*/

}

Sista raden ska vara endast:
input_name.value ="";

som du själv skrivit i alert-raden ovan ;-)
Det går ju inte att skriva input_name.name.value

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