ugrás a tartalomhoz

Űrlap elemek duplikálása

tiku I tikaszvince · 2005. Ápr. 8. (P), 15.48
Sziasztok!
Ismét belefutotam egy kis JS problémába, és a segítségeteket kérném.
Van nekem egy űrlapom, ahol az itt található JavaScriptre, vagy valami nagyon hasonlóra lenne szükségem. Az oldalon írja, hogy
This mini-library works in *real* browsers (i.e. Mozilla family). I don't known about IE, and it doesn't matter for me.

Na kiderült, hogy IE alatt nem működik. Az egy dolog, hogy ez a funkció nem működik, de a többi JS-es bűvészkedést is kikapcsolja.
Opera alatt, viszont működik... de duplán. Tehát, ha rányomok a gombra, hogy "Add..", akkor nem egy "blokk" jelenik meg, hanem kettő, plussz az üres mezőkbe beleírja hogy null....

Lényeg a lényeg, valaki tudna adni tippet, hogy hogyan lehetne normális működésre bírni, több böngészőben is? vagy ismertek valami hasonló megoldást? Nagyon nagy szükségem lenne rá, de így nem tudom felhasználni...

köszi
Tiku
 
1

Tényleg semmmi?

tiku I tikaszvince · 2005. Ápr. 8. (P), 20.09
Tényleg nincs senkinek semmi ötlete, vagy nekem is benyomott CapsLock-al kellene feltennem minden kérdést, hogy legalább annyit kapjak, hogy hülye vagy kiscsákó, úgysem lehet megcsinálni...
Csak a szakdolgozatomhoz kellene, tényleg nem fontos, de amíg ez nincs meg addig nem tudok tovább lépni sem, mert (terveim szerint) ennek az űrlapnak a felépítésétől függ majd a PHP feldolgozó felépítése.
Azért ha mégis kiváncsi valaki akkor a http://tiku.uw.hu/kiskonyvtar/ címen megtalálja a problemás űrlapot. Konkrétan a szerzők megadásánál szeretném használni a duplicatort...
thx
2

Benyomott caps lock nem segít

Hojtsy Gábor · 2005. Ápr. 8. (P), 20.50
...konkrétabb kérdések viszont igen. Választ mindenesetre senki sem garantál, akkor sem, ha sokan érthetnek a problémáa megoldásához.
4

bocs a hisztiért

tiku I tikaszvince · 2005. Ápr. 8. (P), 21.22
... de a múltkor tényleg nagyon gyorsan, nagyon jól használható választ kaptam, és kicsit elkenődtem, (azt akartam írni hogy felháborodtam, de inkább elkeseredtem) azt látva, hogy valaki BEÜVÖLT a közösbe, számomra eléggé tolakodó stílusba, és kb fél óra után kapja a választ, még csak nem is RTFM, hanem illedelmesen
asszem kiírtam magamból
7

nem megoldás

Hojtsy Gábor · 2005. Ápr. 8. (P), 22.01
Nem kapott választ a kérdésére, maga találta meg :) De mivel nem csak téged zavart, most már nincs dokumentálva.
3

clone

attlad · 2005. Ápr. 8. (P), 21.00
Ha csak annyi kell, hogy tudj új sorokat hozzáadni, akkor kb. ennyi elég:

<script type="text/javascript">
function addNewRow()
{
  var cRow = document.getElementById('rowName');
  var newRow = cRow.cloneNode(true);
  cRow.parentNode.appendChild(newRow);

}
</script>

<form method="POST">
  <input type="button" onclick="addNewRow();" value="Új hozzáadása" />
  <table>
    <tbody>
    <tr id="rowName">
      <td><select name="name1[]" id="name1[]"><option value="value1">cím1</option></select></td>
      <td><select name="name2[]" id="name2[]"><option value="value2">cím2</option></select></td>
    </tr>
    </tbody>
  </table>
</form>
IE5+, Gecko, Opera

A name1[] forma miatt PHP-ban elvileg tömbként fogod megkapni az értékeket.

Attila
5

nagyon köszi

tiku I tikaszvince · 2005. Ápr. 8. (P), 21.37
..de tényleg!
mostmár tényleg elkellene kezdenem foglalkozni a JS-el, mert úgy érzem magam, mint ahogy a rettenetesen nagyot halló nagymamám érezhette magát, ha részt akart venni egy beszélgetésben, mert valakinek mindig tolmácsolnia kellett, mert nem hallotta

Ez is az egyik baja volt a duplicatornak, hogy valami miatt, nem tudtam tömb formában kicsalni belőle az adatokat...
első körben valami olyasmit szerettem volna, hogy egy tömbben legyen az egy sorban elhelyezkedő selectek értéke (tehát egy tömben egy szerző és egy funkció legyen) de most végiggondolva, egyszerűbb, ha két tömbböt fogadok...

egy kis küzdéssel sikerült rávennem hogy egy űrlapon belül két form részletet is tudjon duplikálni

...
<script type="text/javascript">
function addNewRow(sor)
{
  var cRow = document.getElementById(sor);
  var newRow = cRow.cloneNode(true);
  cRow.parentNode.appendChild(newRow);

}

</script>
</head>
<body>
<form method="POST">
  <input type="button" onclick="addNewRow('rowName');" value="Új hozzáadása" />
  <table>
    <tbody>
    <tr id="rowName">
      <td><select name="name1[]" id="name1[]"><option value="value1">cím1</option></select></td>
      <td><select name="name2[]" id="name2[]"><option value="value2">cím2</option></select></td>
    </tr>
    </tbody>
  </table>
</form>
...
És mégegyszer nagyon köszönöm
6

Nem akarok telhetetlennek tűnni

tiku I tikaszvince · 2005. Ápr. 8. (P), 22.01
Nem akarok telhetetlennek tűnni, de azt meg lehet oldani valahogy, hogy ha text típusú inputokat klónozok, akkor a tartalmuk ne másolódjon be az új sorba?
tehát, hogy üres sorok klónozódjanak?
8

value

attlad · 2005. Ápr. 8. (P), 22.21
Klónozás után törlöd az értékét, persze ha nem közvetlenül az inputot klónozod, hanem mint a fenti példában a táblázat sort, akkor meg kell keresned a táblázatsorban az input elemet, pl. fenti példánál cRow.getElementsByTagName('input')[0].value = ''; lenne az első input értékének törlése, ha a select helyett input elem lenne.

Attila
9

csak két pici bug

tiku I tikaszvince · 2005. Ápr. 8. (P), 23.08
átalakítottam erre a kódot

function addNewRow(sor, ertekmarad)
{
  var cRow = document.getElementById(sor);
  var newRow = cRow.cloneNode(true);
  cRow.parentNode.appendChild(newRow); 
  if (ertekmarad == false) {
    cRow.getElementsByTagName('input')[0].value = '';
    cRow.getElementsByTagName('input')[1].value = '';
    cRow.getElementsByTagName('input')[2].value = '';
    cRow.getElementsByTagName('input')[3].value = '';
  }
}
Innentől kezdve már nem megy operában, vagyis megy de az újonnan kitöltött sor tartalmát is törli.
A másik, hogy FF-ban mindig a klónozott sor elé szúrja be az új sort (tehát 5 beszúrás után így néz ki a sorrend: 2,3,4,5,6,1
IE-ben viszont beszúráskor az előzőleg berakott klónt ledobja a legaljára, ( a sor így fog kinézni: <üres>,1,2,3,4,5,6
<vágyakozás>
Az lenne az igazi, ha az üres sor lenne az utolsó sor, a már kitöltöttek pedig a soronkénti első input értéke szerintt rendeződnének minden beszúrásnál
</vágyakozás>
De tényleg ne legyek telhetetlen: már csak azt szertném, ha az üres sor mindig legalulra íródna hozzá
10

Rosszat törölsz

attlad · 2005. Ápr. 8. (P), 23.37
A klón elem értékét töröld, ne az eredetit, rosszul írtam ez előző hozzászólásban, így jó:

function addNewRow(sor, ertekmarad)
{
  var cRow = document.getElementById(sor);
  var newRow = cRow.cloneNode(true);
  if (ertekmarad == false) {
    newRow.getElementsByTagName('input')[0].value = '';
    newRow.getElementsByTagName('input')[1].value = '';
    newRow.getElementsByTagName('input')[2].value = '';
    newRow.getElementsByTagName('input')[3].value = '';
  }
  cRow.parentNode.appendChild(newRow);
}
Attila
11

újrafelhasználhatóság

tiku I tikaszvince · 2005. Ápr. 9. (Szo), 00.11
A kód jelen állapotában maximálisan kielégíti az igényeimet, talán még ha több inputos sort kell klónozni akkor át is tudom alakítani, mégegyszer
many thx and riszpekt :) , de...

Az újra felhsználhatóság jegyében nem lehet megoldani, hogy ne kelljen egyenként kitörölni az egyes inputok értékét, hanem automatice üres sor szúródjon be? Valami olyasmire gondolok, hogy az eredetileg megadott sort sablonnak veszi, és azzal bővíti a táblázatot...

ha félreérthető voltam, bocs, de már két hete nem alszom rendesen (ezek az átkozott határidők), ezért most irány az ágy, holnap(vagy már ma inkább) problémázok tovább
(Ma is holnap fekszünk le mint tegnap :o) )
12

defaultValue

attlad · 2005. Ápr. 9. (Szo), 01.40
Így az új sor mindig a legelső sor alapértékeit veszi fel:

function addNewRow(sor)
{
  var cRow = document.getElementById(sor);
  var newRow = cRow.cloneNode(true);
  for (var i = 0, l = newRow.getElementsByTagName('input').length; i < l; i++) {
    newRow.getElementsByTagName('input')[i].value = cRow.getElementsByTagName('input')[i].defaultValue;
  }
  cRow.parentNode.appendChild(newRow);
}
Attila