webForumDet fria alternativet

Skicka redan ifylld formulärdata i hidden fält

JavaScript

9 svar · 339 visningar · startad av mangan

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

Hej!
Sitter med ett litet problem som jag inte fattar vad jag gör för fel på. Är säkert något skitfel som jag har gjort. Problemet är detta:
Jag har ett formulär som jag postar till en funktion som kollar mejlet och sedan postar det. Nu vill jag ta ett av dom ifyllda värdena och kopiera detta till ett hidden-fält jag har i mitt formulär innan det postas. Jag har provat att lägga in följande i kontrollfunktionen innan den returnerar:

function isMailReady(form) {
var passed = false;
.
.
.
form.namn.value = form.realname.value; // här tilldelar jag hidden-fältet värdet 
return passed;
}

Om jag provar att skriva ut form.namn.value med alert() så får jag rätt värde men när det postas så följer inte värdet med utan blir en tom sträng bara. Så här ser de två "drabbade" fälten ut:

 <input name="realname" type="text" id="namn" tabindex="2" size="30">
<input type="hidden" name="namn" value="">

Kan inte se vad jag gör fel. Hjälp någon?

Medlem sedan dec. 20025 483 inlägg
#2

Svårt att säga vad du gör för fel, men här har du ett fungerande exempel som du kanske kan utgå från:

<script type="text/javascript">

function f(fObj) {
    fObj.namn.value = fObj.realname.value;

    return true;
}

</script>

<form action="foo.html" onsubmit="return f(this)">
    <input type="text" name="realname">
    <input type="hidden" name="namn">
    <input type="submit">
</form>

:)

Medlem sedan feb. 2003216 inlägg
#3

Ser exakt likadant ut förutom att du utlämnat kontrollen av fälten. Någon annan?

Medlem sedan dec. 20025 483 inlägg
#4

Som sagt, det är svårt att peka på någonting specifikt när du inte visar all relevant kod. Formulärkoden och isMailReady()-funktionen i sin helhet kanske kan hjälpa.

:)

Medlem sedan aug. 20039 340 inlägg
#5

Kanske stör lite att en input har samma name= som den andra har id=?
Alltså att webbläsaren tolkar form.name och form.realname som samma kontroll eftersom id= har högre prioritet än name=.

form.namn.value = form.realname.value;
Medlem sedan feb. 2003216 inlägg
#6

Ja, man kan ju tycka det. Ändrade på namnen men det funkar fortfarande inte. Provade att sätta ett value på hidden-fältet och det följde iaf med oförändrat till mottagarsidan. Här kommer hela kontroll funktionen:

<SCRIPT LANGUAGE="JavaScript">
function fixElement(element, message) {
alert(message);
element.focus();
}
function isMailReady(form) {
var passed = false;
if (form.Kundnummer.value == "") {
fixElement(form.Kundnummer, "Kundnummer ej ifyllt.");
}
else if (form.email.value.indexOf("@") == -1 ||
form.email.value.indexOf(".") == -1) {
fixElement(form.email, "E-postadress ej ifylld / ej korrekt. Var god kontrollera!");
}
else if (form.Referens.value == "") {
fixElement(form.Referens, "Referensperson ej ifylld.");
}
else {
passed = true;
}
form.namn.value = form.realname.value;
return passed;
}
</SCRIPT>

och hur fälten ser ut nu:

<td colspan="2" bgcolor="#0079bf"><input name="realname" type="text" id="realname" tabindex="2" size="30">
<!-- Detta är det gömda fält som skall få samma värde som fältet ovan "realname" -->
<input type="hidden" name="namn" id="namn" value="test">

Formuläret skickar jag till en php-sida där jag bara kör var_dump() på POST-datan. Fattar inte varför det inte funkar.........*suck*

Medlem sedan dec. 20025 483 inlägg
#7
<SCRIPT LANGUAGE="JavaScript">
function fixElement(element, message) {
    alert(message);
    element.focus();
}
function isMailReady(form) {
    var passed = false;

    if (form.Kundnummer.value == "") {
	fixElement(form.Kundnummer, "Kundnummer ej ifyllt.");
    }

    else if (form.email.value.indexOf("@") == -1 ||
	form.email.value.indexOf(".") == -1) {
	fixElement(form.email, "E-postadress ej ifylld / ej korrekt. Var god kontrollera!");
    }

    else if (form.Referens.value == "") {
	fixElement(form.Referens, "Referensperson ej ifylld.");
    }

    else {
	passed = true;
    }

    form.namn.value = form.realname.value;

    return passed;
}
</SCRIPT>

<form action="" onsubmit="return isMailReady(this)">
    <input name="Kundnummer">
    <input name="Referens">
    <input name="email">
    <input name="realname" type="text" id="realname" tabindex="2" size="30">
    <input type="hidden" name="namn" id="namn" value="">
    <input type="submit">
</form>

:)

Medlem sedan feb. 2003216 inlägg
#8

Vad menar du Peter?

Medlem sedan aug. 20039 340 inlägg
#9

Peter menar nog att du har gjort något fel i koden som inte direkt syns. Här har han skrivit en kod som fungerar, som du kan använda och lite grann börja om från scratch.

Medlem sedan dec. 20025 483 inlägg
#10

Ja, ovanstående exempel fungerar. Sedan kan du lägga till din resterande formulärkod.

:)

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