Autor | Zpráva | ||
---|---|---|---|
Parker Profil * |
#1 · Zasláno: 18. 8. 2011, 14:47:04
Zdravím,
vytvářím si malou fotogalerii a pro hromadné nahrání fotek na server chci použit jQuery. Našel jsem si tuhle funci, která mi vytváří kopie inputů: <script type="text/javascript"> $(document).ready(function() { $('#btnAdd').click(function() { var num = $('.clonedInput').length; // how many "duplicatable" input fields we currently have var newNum = new Number(num + 1); // the numeric ID of the new input field being added // create the new element via clone(), and manipulate it's ID using newNum value var newElem = $('#photo_packet_' + num).clone().attr('id', 'photo_packet_' + newNum); // manipulate the name/id values of the input inside the new element newElem.children(':second').attr('id', 'description[' + newNum + ']').attr('name', 'description[' + newNum + ']').attr('value', ''); newElem.children(':first').attr('id', 'photo[' + newNum + ']').attr('name', 'photo[' + newNum + ']').attr('value', ''); // insert the new element after the last "duplicatable" input field $('#photo_packet_' + num).after(newElem); // enable the "remove" button $('#btnDel').attr('disabled',''); // business rule: you can only add 5 names if (newNum == 10) $('#btnAdd').attr('disabled','disabled'); }); $('#btnDel').click(function() { var num = $('.clonedInput').length; // how many "duplicatable" input fields we currently have $('#photo_packet_' + num).remove(); // remove the last element // enable the "add" button $('#btnAdd').attr('disabled',''); // if only one element remains, disable the "remove" button if (num-1 == 1) $('#btnDel').attr('disabled','disabled'); }); $('#btnDel').attr('disabled','disabled'); }); </script> Formulář pro odeslání fotek i s popiskem: <form action="" method="post" enctype="multipart/form-data"> <div id="photo_packet_1" style="margin-bottom:4px;" class="clonedInput"> <span class="setObject">Umístění fotogafie:</span><input class="setObject" type="file" name="photo[1]" id="photo[1]"><br /> <span class="setObject">Popis fotogafie:</span><input class="setObject" type="text" name="description[1]" id="description[1]" value="" /> </div> <div> <input type="button" id="btnAdd" value="Přidat další fotografii" /> <input type="button" id="btnDel" value="Odebrat fotografii" /> </div> <input type="submit" name="submit" value="Uložit" class="" /> <input type="hidden" name="sentForm" value="newPhotos" /> </form> Ale vyskytl se malý problém. Když vložím před inputy jiný tag (span nebo label), tak se mi chybně odesílají informace $_FILE['photo'] => vždy obsahuje pouze jednu fotografii (první). Ale $_POST['description'] je v pořádku, ten obsahuje správný počet popisků. V momentě, kdy odstraním přidané tagy (v tomto případe <span>) tak odesílání funguje tak jak má. Můžete mi prosím poradit v čem je problém a nebo jak byste to řešili? Díky moc. P. |
||
peta Profil |
#2 · Zasláno: 18. 8. 2011, 15:17:28 · Upravil/a: peta
newElem.children(':second').attr(...description newElem.children(':first').attr(...photo Znamena, ze nastavi id prvku v poradi 1 (second) a 0 (first). Pokud vlozis span, tak se poradi zmeni. Misto toho pouzij :eq(0) :eq(1) :eq(2). |
||
Parker Profil * |
#3 · Zasláno: 18. 8. 2011, 16:55:53
peta:
Prosímtě, mohl bys mi to jěště malinko vysvětlit? A především ukázat jak to mám zapsat. Zkoušel jsem to dle rady a i různě přeházet a jediné čeho jsem docílil bylo, že se mi $_FILE['photo'] odešle správně, ale pak se u $_POST['description'] odešle vždy jen první položka. Zkoušel jsem ten newElem.children voližit pro kazdý element který se má nakopírrovat, ale stále stejný výsledek :( : newElem.children(':eq(0)'); newElem.children(':eq(1)').attr('id', 'photo[' + newNum + ']').attr('name', 'photo[' + newNum + ']').attr('value', ''); newElem.children(':eq(2)'); newElem.children(':eq(3)').attr('id', 'description[' + newNum + ']').attr('name', 'description[' + newNum + ']').attr('value', ''); |
||
Parker Profil * |
#4 · Zasláno: 18. 8. 2011, 16:59:45
peta:
Ouuu, beru zpět, ja jsem zapomněl že tam je ještě vložený tag <br />. Takže mi nyní správně funguje tento zápis: newElem.children(':eq(0)'); newElem.children(':eq(1)').attr('id', 'photo[' + newNum + ']').attr('name', 'photo[' + newNum + ']').attr('value', ''); newElem.children(':eq(2)'); newElem.children(':eq(3)'); newElem.children(':eq(4)').attr('id', 'description[' + newNum + ']').attr('name', 'description[' + newNum + ']').attr('value', ''); Je to tak v pořádku, udělal bys to tak také? Jinak díky moc za radu! |
||
Časová prodleva: 13 let
|
0