Dinamikus input mező hozzáadása JavaScripttel
Szaisztok!
Egy olyan kis JS függvényt szeretnék írni, ami egy formhoz dinamikusan hozzáad egy újabb szövegbeviteli mezőt. Addig el is jutottam, hogy createElement-tel appenChild-dal hozzáadom az elemet, de azt is megszeretném oldalni, hogy a mező id-jéhez és name-jéhez mindig hozzáadjon egy számot hogy majd PHP-s feldolgozásnál is felismerhetők legyenek az újonnan hozzáadott form elemek.
Sajnos nem tudok sehogy se rájönni, hogy hogyan növeljem eggyel az attribútum értéke mögé írt számot. Már sok verziót kipróbáltam, de nem akar összejönni, biztos hogy valami irtózatos aprósággal van a baj.
Hálás lennék a segítségért, előre is köszi! :)
Itt a kód:
ui. Pontosan az a probléma, hogy az új input hozzáadásánál kap ugyan számot, de ez csak 2-ig növekszik (ami végül is logikus is, mert most úgy állítottam be a for ciklust, de nem tudom hova rakjam a ciklust hogy ténylegesen a setAttribute-ba írt "x" változó értékét növelje a függvény minden egyes meghívásakor.
■ Egy olyan kis JS függvényt szeretnék írni, ami egy formhoz dinamikusan hozzáad egy újabb szövegbeviteli mezőt. Addig el is jutottam, hogy createElement-tel appenChild-dal hozzáadom az elemet, de azt is megszeretném oldalni, hogy a mező id-jéhez és name-jéhez mindig hozzáadjon egy számot hogy majd PHP-s feldolgozásnál is felismerhetők legyenek az újonnan hozzáadott form elemek.
Sajnos nem tudok sehogy se rájönni, hogy hogyan növeljem eggyel az attribútum értéke mögé írt számot. Már sok verziót kipróbáltam, de nem akar összejönni, biztos hogy valami irtózatos aprósággal van a baj.
Hálás lennék a segítségért, előre is köszi! :)
Itt a kód:
<html>
<head>
<title>Új input mező hozzáadása formhoz dinamikusan JS-el</title>
<style type="text/css">
input{display: block;
margin: 5px 0;
}
</style>
<script type="text/javascript" charset="utf-8">
function addField(fieldset){
var fields = fieldset;
for (i=1; i<=1; i++){
var x=1;
x++;
var newField = document.createElement('input');
newField.setAttribute('type', 'text');
newField.setAttribute('name', 'myinput'+x);
newField.setAttribute('id', 'my_input_'+x);
fields.appendChild(newField);
}
}
</script>
</head>
<body>
<form id="myform" action="" method="POST">
<fieldset id="myfieldset">
<input type="text" name="myinput" id="my_input">
</fieldset>
<a href="javascript: void(0);" title="még egy mező hozzáadása" onclick="addField(document.getElementById('myfieldset') )"><small>Hozzáadás</small></a>
<input type="submit" name="mysubmit" id="my_submit" value="Mehet a mandula">
</form>
</body>
</html>
<head>
<title>Új input mező hozzáadása formhoz dinamikusan JS-el</title>
<style type="text/css">
input{display: block;
margin: 5px 0;
}
</style>
<script type="text/javascript" charset="utf-8">
function addField(fieldset){
var fields = fieldset;
for (i=1; i<=1; i++){
var x=1;
x++;
var newField = document.createElement('input');
newField.setAttribute('type', 'text');
newField.setAttribute('name', 'myinput'+x);
newField.setAttribute('id', 'my_input_'+x);
fields.appendChild(newField);
}
}
</script>
</head>
<body>
<form id="myform" action="" method="POST">
<fieldset id="myfieldset">
<input type="text" name="myinput" id="my_input">
</fieldset>
<a href="javascript: void(0);" title="még egy mező hozzáadása" onclick="addField(document.getElementById('myfieldset') )"><small>Hozzáadás</small></a>
<input type="submit" name="mysubmit" id="my_submit" value="Mehet a mandula">
</form>
</body>
</html>
ui. Pontosan az a probléma, hogy az új input hozzáadásánál kap ugyan számot, de ez csak 2-ig növekszik (ami végül is logikus is, mert most úgy állítottam be a for ciklust, de nem tudom hova rakjam a ciklust hogy ténylegesen a setAttribute-ba írt "x" változó értékét növelje a függvény minden egyes meghívásakor.
hiba
Az x-et a cikluson kívül kellene definiálnod..
Amúgy szerencsésebb a dinamikus formot dinamukusan kezelni:
Értsd: ha sok meződ van és mindnek ugyan azt a nevet állítod be, akkor a request-ből egy tömbként tudod kiszedni őket.
Java-ban pl.: request.getParameterValues()-al
Php-ban nem tudom ez pontosan milyen paranccsal oldható meg, ennek utánna kellene nézned.
üdv, Gábor
ez tetszett :D
mindegy, akkor már ha jót derültem rajta akkor segítek:
bb sl
köszi a segítséget - kicsit másképp
Igazság az eredeti koncepció az lett volna, hogy minden egyes input hozzáadásánál eggyel növekszik a name, illetve id attribútumokhoz írt szám.
Rájöttem, hogy hiába írok bármit a for ciklusba, mivel a ciklusváltozó be van égetve és a ciklus minden függvényhíváskor - jelen esetben a "még egy mező hozzáadása feliratú" linkre történő kattintáskor - lefut, a for is mindig egytől indul és x-ig tart.
Ráadásul jó lenne, ha valahogy lekorlátozhatnám, hogy hány mezőt adhat hozzá a user (vicces is lenne valaki rajta felejti az egeret és belenyom 200 új inputot :D ).
Szóval a következőt találtam ki:
Mellesleg ez csak demó, amit amolyan, "na vajon tudok-e ilyet csinálni?" illetve "egyszer majd csak jó lesz még valamire" alapon indítottam, szóval nem kell tökéletesnek lennie :)
Mellesleg ironwill-nek igaza lehet, abban hogy szerveroldali feldolgozáskor nem feltétlenül kell minden inputnak egyedi azonosító.
Mindenesetre még egyszer kösz!
display: none
így tudod megoldani:
bb sl
még jobb
Azonban most megtaláltam megoldást mégpedig úgy, ahogy eredetileg akartam, olvassátok el érdekes, és pofon egyszerű:
Add and Remove HTML elements dynamically with Javascript
én
itt a form: