![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 26.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
z javascript miałem bardzo mało do czynienia (głównie PHP), ale uczę się na bieżąco robiąc własne projekty. W chwili obecnej mam ciężki orzech do rozgryzienia. Chciałbym dodać opcję, że po kliknięciu użytkownikowi pojawiają się 2 nowe textboxy obrazujące współrzędne 'x' oraz 'y'. A więc jest sobie na stronce button po kliknięciu na który textboxy mają być dodawane i kolejno otrzymywać inne name oraz id (np.: x1,x2,y1,y2 itd) ze względu na dalszą obsługę przez interpreter php. Czyli pierwsze kliknięcie = jeden textbox X oraz Y. Dziesięć kliknięć na button = 10x textbox X oraz 10x textbox Y. Z wcześniejszego tematu na forum dowiedziałem się mniej więcej jak dodawać przez JS elementy HTML - jednak nadal nie do końca to "kminię". Przykładowy kod dodający buttona, wyszperany w sieci: Mi chodzi dokładnie o coś takiego, z tym, że chcę, aby kolejne textboxy otrzymywały inne 'name' oraz 'id'. Może ktoś zna jakiś ciekawy tutorial odnośnie tego zagadnienia, bo ja się w google naszperałem, a w kursach online po prostu tego brakuje. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jak ma wyglądać ta strona (wrzuć jakiś link, albo choćby projekt w *.jpg)
Cytat 2 nowe textboxy obrazujące współrzędne 'x' oraz 'y'. textbox to znaczy co dokładnie? Ten kod, który podałeś powinien utworzyć przyciski HTML. (ale to tylko kwestia odpowiedniego tagu, w tym kodzie masz <button>. Może chodziło ci o <input type="text" /> ?) Cytat kolejno otrzymywać inne name oraz id id podmieniasz np. tak: Kod var btn=document.createElement("BUTTON"); btn.id = "przycisk-1"; name chyba też (ale nie jestem pewien): Kod btn.name = "przycisk-1"; żeby zmienić współrzędne przycisku dany element musi mieć CSS position:absolute (albo inne, chodzi o to żeby nie było statyczne), a potem w JS: Kod var x = 120; // wspolrzedne przycisku var y = 250; btn.style.left = x + "px"; btn.style.top = y + "px"; albo w jQuery, mniej pisania, ale na to samo wychodzi (jQuery po prostu oszczędza klawiaturę, ale nie zwalnia z obowiązku wiedzy o tym, jak działa CSS czy DOM). PS. żeby w id były współrzędne: btn.id = "przycisk-" + x + "-" + y; np. "przycisk-100-200" (x, y powinny być liczbami całkowitymi). Ten post edytował PrinceOfPersia 23.03.2013, 21:33:36 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 26.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
super, dzięki za wskazówki;) Dokładnie mówiąc o textbox'ie chodzi mi właśnie o <input type="text" />
Wklepałem sobie:
i działa:) Pytanie tylko skąd javascript wie, żeby generować type "text" skoro tego nie podałem? Przecież nie podałem <input type="text" />, więc równie dobrze może to być button/submit/checkbox/radio itp itd Na kwestię id/name miał bym pomysł, dzięki któremu odbiór i późniejsza obróka informacji byłaby łatwiejsza. Wystarczyłoby wrzucić zmienna licznikowa, która zliczałaby ilość tych klików na button w wyniku czego każdy input typu "text" nazywał by się np. "text"+i+"". Później w php mógłbym napisać pętelkę for (i=1; i<=licznik; i++) {odebrać elementy z tablicy $_POST i wykonać na niej działanie}. Kwestia jest taka, że nie bardzo wiem jak ten licznik zaimplementować. Jeśli chodzi o zwykłą Jave to deklarowanie zmiennych nie inicjowanych żadnymi wartościami, kończyło się tym, że miały one wartości domyśle. Czyli np. int a; powodowało, że a posiadało 0. Wystarczyło sobie dopisać do obsługi button'a 'a=a+1;' i grało, natomiast w javascript wartości niezainicjalizowana posiada wartość "undefined", a więc muszę na początku dodać np. var a=0; w wyniku czego za każdym kliknięciem zmienna ta będzie zawsze inicjalizowana od nowa i nie zmieni wartości. No i koniec końców nie wiem jak w JS doprowadzić do tego, żeby wartość kliknięć była zliczana:( Any idea? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) ![]() ![]() |
Pytanie tylko skąd javascript wie, żeby generować type "text" skoro tego nie podałem? Przecież nie podałem <input type="text" />, więc równie dobrze może to być button/submit/checkbox/radio itp itd odpowiedź na Twoje pytanie:
zobacz co się stanie ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cytat i działa:) Pytanie tylko skąd javascript wie, żeby generować type "text" skoro tego nie podałem? Przecież nie podałem <input type="text" />, więc równie dobrze może to być button/submit/checkbox/radio itp itd pewnie domyślnie, ale nie polegałbym na tym bo nie wiadomo jak w różnych przeglądarkach będzie. Lepiej dopisać Kod btn.setAttribute('type', 'text'); Cytat Jeśli chodzi o zwykłą Jave (...) natomiast w javascript wartości niezainicjalizowana posiada wartość "undefined" JavaScript nie pochodzi od Javy więc nie idź tym tropem. Najbliżej JS do ActionScripta (którego się używa przy aplikacjach Flash). Cytat a więc muszę na początku dodać np. var a=0; w wyniku czego za każdym kliknięciem zmienna ta będzie zawsze inicjalizowana od nowa i nie zmieni wartości. w JavaScript są różne zasięgi zmiennych. Możesz zadeklarować zmienną poza daną funkcją, i też będzie widoczna. Kod var a=0; function powieksz() { a++; } powieksz(); alert(a); powieksz(); alert(a); -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 26.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
setAttribute() - size/maxlength itp widzę, że też można modyfikować, a więc kolejne pieczenie przy jednym ogniu upichciłem:D
Cytat(PriceOfPersia) JavaScript nie pochodzi od Javy więc nie idź tym tropem. A więc tylko nazwa wspólna:) Cytat(PriceOfPersia) w JavaScript są różne zasięgi zmiennych. Możesz zadeklarować zmienną poza daną funkcją, i też będzie widoczna. I tu był pies pogrzebany. Kombinowałem jak cholera, a rozwiązanie trywialne ![]() Jutro pobawię się jeszcze, być może nowe pytania się nasuną. Póki co dziękuję za wyczerpujące wypowiedzi ![]() --@EDIT-- No i mam jeszcze kilka pytań. Po pierwsze pozycjonowanie textbox'u wydaje się nie działać - przynajmniej u mnie nie pozycjonuje, gdy wrzucę sobie coś takiego:
Kolejne pytanie brzmi: Jak może poprzez JS wywołać składnię html: a ) <center></center> b ) <label></label> c ) <br />, żeby zrobić sobie pętelke, która za każdym kliknięciem będzie robić przejście do nowej lini, w wyniku czego nie będę miał generowanych elementów w ciągu (jednej lini) Ten post edytował danon198901 24.03.2013, 17:08:37 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Bo musisz mieć w stylach ustawione position:absolute (albo inne, nie statyczne):
Kod obj.style.position = "absolute"; Cytat Kolejne pytanie brzmi: Jak może poprzez JS wywołać składnię html: a ) <center></center> b ) <label></label> c ) <br />, żeby zrobić sobie pętelke, która za każdym kliknięciem będzie robić przejście do nowej lini, w wyniku czego nie będę miał generowanych elementów w ciągu (jednej lini) Tak samo. Niezależnie od tego czy jest to element zamykany od razu <br /> czy taki, który może mieć dzieci <div>, </div> robisz tak samo. Poza tym, możesz też operować na innerHTML, coś a la: Kod document.body.innerHTML += '<input type="text" size="2" maxlength="2" style="position:absolute;left:500px;top:500px" id="od' + licznik + '" />'; -------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 26.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(PrinceOfPersia) Tak samo. Niezależnie od tego czy jest to element zamykany od razu <br /> czy taki, który może mieć dzieci <div>, </div> robisz tak samo. No ok, ale na przykładzie center:
skąd skrypt będzie wiedział kiedy zamknąć <center> ? Pewnie ja nie rozumuję poprawnie. createElement tworzy element, zaś fizycznie wstawienie go odbywa się poprzez appendChild tak? Zatem jeśli zaraz po zadeklarowaniu zmiennej cent umiejscowie appendChild wówczas powinno odbyć się 'wyśrodkowanie' wszystkiego tak? Bo generalnie wstawiam to i mimo wszystko nic nie wyśrodkowuje...no i co z elementem zamykającym? Wtedy zrobić var cent = document.createElement("/CENTER"); Cytat(PrinceOfPersia) Poza tym, możesz też operować na innerHTML, coś a la: document.body.innerHTML += '<input type="text" size="2" maxlength="2" style="position:absolute;left:500px;top:500px" id="od' + licznik + '" />'; Oooo to jest coś bardziej czytelnego i zrozumiałego. Wrzuciłem prosty test i niestety, ale po zastosowaniu funkcji innerHTML i kliknięciu na button moim oczom okazuje się nowa strona zastępująca poprzednią, a co za tym idzie nie mam możliwości po raz kolejny klikania na button czy wpisywaniu dalszych informacji. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 26.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
document.createElement("center") tworzy Ci "kontener" do którego możesz dopiero ładować inną zawartość, która zostanie wyśrodkowana... samo takie wywołanie + appendChild do body spowoduje umieszczenie następującego kodu: no to w takim razie jak do tego kontenera załadować zawartość, która ma zostać wyśrodkowana? Bo sama regułka niewiele mi mówi:( |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Zatem jeśli zaraz po zadeklarowaniu zmiennej cent umiejscowie appendChild wówczas powinno odbyć się 'wyśrodkowanie' wszystkiego tak? no nie, bo dokument HTML ma strukturę hierarchiczną i pośrodkuje się tylko to co jest w danym pojemniku. Cytat Wtedy zrobić var cent = document.createElement("/CENTER"); nie. Jak robisz createElement to automatycznie tworzy on również zamykający tag. Myśl o tym jak o obiektach, bo zasadniczo tak jest - jest to programowanie obiektowe - tworzysz obiekty(createElement), dodajesz je do drzewa dokumentu (appendChild), ale możesz też wsadzać jeden obiekt w drugi i tworzyć bardziej skomplikowaną hierarchię. -------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 26.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
A więc reasumując jak dokładnie to zrobić, bo nadal nie rozkminiłem tego (poza teoria zagnieżdżenia jednego appendChild'a w drugim)
![]() Na moim przykładzie jak powinno wyglądać umieszczenie generowanych inputów wewnątrz tagu <center></center>?
Chyba należę do tych "ciężej rozumujących" - muszę zobaczyć, bo nie "skapuję" tego:( |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
no, normalnie:
cent.appendChild(obj); cent.appendChild(objSec); Cytat Chyba należę do tych "ciężej rozumujących" - muszę zobaczyć, w przeglądarkach są tzw. narzędzia dla developerów, Ctrl+Shift+J w Google Chrome, w Firefoxie i IE - F12 (w FF jak masz wtyczkę Firebug), w Operze Ctrl + Shift + I. I tam możesz "zobaczyć" strukturę dokumentu i wszystko generalnie co ci się wyprodukowało w JS. poza tym w JS jest coś takiego jak pętla for, bo teraz dublujesz kod niepotrzebnie tworząc 2 inputy. -------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 26.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
heh...a ja szukalem i kombinowałem coś w stylu dodanie parametru w () dla appedChild'a
![]() Cytat(PrinceOfPersia) poza tym w JS jest coś takiego jak pętla for, bo teraz dublujesz kod niepotrzebnie tworząc 2 inputy. Tak wiem wiem:D Pisałem coś tam w C#, PHP i jeszcze kilku językach i pętle/instrukcje warunkowe itp są raczej nieodzowną częścią każdego języka programowania:P |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 1.05.2025 - 05:23 |