Autor | Zpráva | ||
---|---|---|---|
stepanka Profil * |
Ahoj,
nevím jestli napsat sem, nebo do sekce Javascript. Případně se omlouvám administrátorům, ale zkusím to sem. Moderátor Chamurappi: Přesouvám z kategorie PHP.
Chtěla bych poprosit o pomoc. Začínám s jQuery a používám ho ve formuláři pro přidávání inputů. Mám kód, který mi po kliknutí na odkaz inputy vytvoří, a potřebovala bych taky odkaz, který mi po kliknutí na něj inputy schová. ZDE je živá ukázka. Kód funkce klienti.js je $(document).ready(function(){ $("#muj_odstavec a").click(function(){ $("#pridane_inputy").append('<table style="text-align:right;"><tr><td>Jméno: <input type="text" name="jmeno[]" value=""></td><td>Příjmení: <input type="text" name="prijmeni[]" value=""></td></tr><tr><td>Pozice: <input type="text" name="pozice[]" value=""></td><td>Telefon: <input type="text" name="telefon[]" value=""></td><td>E-mail: <input type="text" name="email[]" value=""></td></tr></table><br /><br />'); }) }); Zbytek se dá zobrazit ze zdrojového kódu stránky. Potřebovala bych ke každé sadě 5ti vkládaných inputů zobrazit také odkaz "Odebrat", který by dané inputy schoval. Už jsem zavedla i metodu pokus-omyl, ale nedaří se :( Budu moc ráda za jakékoliv rady. Předem děkuju. |
||
ah01 Profil |
#2 · Zasláno: 1. 9. 2009, 23:18:30
Na tom celkem nic není, tady máš příklad:
http://jquery.jslab.net/zkousecka/#bba8715b872b5f92ee7891dff7be02a6 Uprav si ho dle svých představ. |
||
stepanka Profil * |
#3 · Zasláno: 2. 9. 2009, 09:29:13
ah01
Moc děkuju za reakci. Upravila jsem si to a funguje to dobře. Ale ... když vytvořím několik inputů a dám reload stránky, všechny zmizí. Když je taková věc ve formuláři a uživatel nevyplní správně některé pole, musel by tyto inputy přidávat a vyplňovat znovu.. Neumí to jQuery přidané inputy na stránce ponechat i při reloadech, až dokud uživatel sám neklikne na Odebrat? Živá ukázka je opět ZDE Mockrát děkuju. |
||
jso Profil * |
#4 · Zasláno: 2. 9. 2009, 09:44:02
stepanka
nejde o jQuery, ale o js, který za tím vším je. Pokud aktualizujete stránku, dojde k defaultnímu vykreslení tak, jak byl uživatel na začátku. Šlo by to řešit například pomocí ukládání cookie (session) a "vykreslení" inputů do stavu, který předcházel reloadu. Buď pomocí js nebo serverového jazyka. |
||
stepanka Profil * |
#5 · Zasláno: 2. 9. 2009, 09:51:15
jso
Ok, děkuju, čekala jsem, že toho budu chtít moc :-) Udělám to přes PHP... ještě jednou díky. |
||
stepanka Profil * |
#6 · Zasláno: 2. 9. 2009, 10:23:10
Ehm ... ještě problém :(
Do formuláře jsem si vložila: if (isset($_POST['jmeno'])) { for ($i=0; $i<count($_POST['jmeno']); $i++) { echo '<div id="odebrat_vlozeny_div"> <table style="text-align:right; float:left;"> <tr> <td>Jméno: <input type="text" name="jmeno['.$i.']" value="'.$_POST['jmeno'][$i].'"></td> <td>Příjmení: <input type="text" name="prijmeni['.$i.']" value="'.$_POST['prijmeni'][$i].'"></td> </tr> <tr> <td>Pozice: <input type="text" name="pozice['.$i.']" value="'.$_POST['pozice'][$i].'"></td> <td>Telefon: <input type="text" name="telefon['.$i.']" value="'.$_POST['telefon'][$i].'"></td> <td>E-mail: <input type="text" name="email['.$i.']" value="'.$_POST['email'][$i].'"></td> </tr> </table> <br /><a href="#" id="odebrat_vlozeny_input">odebrat</a><br /><br /><br /><br /> </div>'; } } A do JS jsem připsala $("#odebrat_vlozeny_input").click(function(){ var odebrat_div = $("#odebrat_vlozeny_div"); odebrat_div.remove(); }); Funguje to celkem dobře, jen po kliknutí na Odebrat po reloadu stránky se dá odebrat pouze první DIV, ostatní DIVy na kliknutí nereagují.. Kdyby mi ještě někdo poradil, byla bych moc vděčná. Díky. |
||
Nox Profil |
#7 · Zasláno: 2. 9. 2009, 11:06:51
stepanka
Nemá být id na stránce jen jednou? Ono na to třeba prohlížeče kašlou, ale nevim jestli to jQuery nezohledňuje a vzhledem k tomu, že je selektor parsovaný při přiřazování zpracovávající funkce a ne až při akci, tak je možné, že na dalších idčkách už ta funkce přiřazena není Mj. jde to přepsat hezčeji $(".vlozeny_input").click(function(){ $(this).remove(); }); |
||
stepanka Profil * |
#8 · Zasláno: 2. 9. 2009, 11:46:40
Nox
Děkuji za reakci. Dá se tedy jQuery nějak říct, aby počítal s daným DIVem, za kterým následuje nějaké číslo? DIV a odkaz v PHP jsem upravila takto: <div id="odebrat_vlozeny_div_'.$i.'"> <a href="#" id="odebrat_vlozeny_input_'.$i.'"> A do JS se pokouším nacpat něco ve smyslu: $("#odebrat_vlozeny_input_"+i).click(function(){ var odebrat_div = $("#odebrat_vlozeny_div_"+i); odebrat_div.remove(); }); Ale odkazy nereagují. Našla jsem na webu cykly FOR a FOREACH pro jQuery, ale ani po necelé hodině se mi to nepovedlo zprovoznit. Budu moc ráda, pokud mi ještě někdo poradí. Je to poslední věc, která mi v tom formuláři nejde. Děkuju. |
||
Nox Profil |
#9 · Zasláno: 2. 9. 2009, 11:53:13 · Upravil/a: Nox
stepanka
Vždyť už jsem ti napsal funkční skript... tedy netestoval jsem ho, ale myslím že funguje a vypadá taky líp (proč znova ve funkci vybírat a navíc ještě přes zbytečnou pomocnou proměnnou, navíc si myslím že to "i" se tam nezapeče, ale bude se při každým volání zjišťovat aktuální hodnota, čímž to nebude fungovat) |
||
stepanka Profil * |
#10 · Zasláno: 2. 9. 2009, 12:07:12
Nox
No, každopádně moc děkuju, ale nevím, jestli mě dobře chápeš. Vytvořila jsem radši živou ukázku Pokud přidám nějaké inputy a kliknu na uložit, zůstanou na místě, což je super. Ale pak už nejdou odebírat. Vložila jsem tam Tvůj kód: $("#odebrat_vlozeny_input").click(function(){ $(this).remove(); }); ale dělá jen to, že nechá zmizet pouze první odkaz "Odebrat". |
||
Nox Profil |
#11 · Zasláno: 2. 9. 2009, 12:11:02
No nepřečetla sis asi co jsem psal...a to jak jsem ten skript psal s tím souvisí, takže uprav výstup skriptu podle mého, ne naopak (no to "odebrat_" tam zůstat může)
|
||
stepanka Profil * |
#12 · Zasláno: 2. 9. 2009, 12:37:59
Nox
„No nepřečetla sis asi co jsem psal..“ Právě to čtu pošesté :-) V tom Tvém třířádkovém skriptu se díky this odstraní ten prvek, na který klikneš. A já bych potřebovala kliknout na odkaz "Odebrat" a nechat tím zmizet celý DIV u tohoto odkazu. Takže to this mi tam logicky ani nesedí. A ani mi to bohužel nefunguje. Živou ukázku jsem dala, skripty jsou zde klienti.js a index.php Tvůj kód je tam použitý (pouze s pozměněným názvem DIVu). Nevím kde je chyba - buď si extrémně sedím na vedení, nebo jsi špatně pochopil můj problém. Moc si vážím toho, že se mi snažíš poradit, ale Tvůj "funkční" skript se mi jako moc funkční nejeví :-( Ale i tak moc díky. |
||
stepanka Profil * |
#13 · Zasláno: 2. 9. 2009, 12:58:56
Jooo, mám to :-) Kdesi jsem se dočetla, že pokud mám na stránce více DIVů se stejným ID, nesmím použít ID, ale CLASS. Taky jsem pozměnila JS skript na tento
$(".odebrat_vlozeny_input").click(function(){ $(this).parent().remove(); }); tím pádem se bere rodičovský prvek a můžu použít this. Takže už mi to funguje, to je fajn.. |
||
jso Profil * |
#14 · Zasláno: 2. 9. 2009, 13:09:28
stepanka
ano, „pokud mám na stránce více DIVů se stejným ID, nesmím použít ID, mezi id a class není "žádný" rozdíl, jen ten, že id se může na stránce vyskytovat maximálně jednou, oproti tomu se třída může vyskytovat několikrát. |
||
Radim24 Profil |
#15 · Zasláno: 3. 9. 2009, 09:46:58
Problém se zmizením prvků by měl jít vyřešit pomocí přesměrování stránky. Když na adrese http://www.domena.cz/index.php? přidáš argumenty, které ti budou definovat ty vytvořené prvky, tak pak bys ty argumenty mohla zpracovat javascriptem a vytvořit políčka znovu pomocí js.
|
||
Časová prodleva: 15 let
|
0