Autor | Zpráva | ||
---|---|---|---|
RastyAmateur Profil |
Krásné poledne..
Mám script, který funguje tak jak má, ale jen jednou. V případě, že ho vykonám podruhé (kliknu na tlačítko), nic se nestale. Proč? $("#newnotesubmit").click(function(){ var rndtop = Math.floor(Math.random() * 90) + 10; var rndleft = Math.floor(Math.random() * 90) + 10; $("#newnotediv").hide(350); $("#main").html(($("#main").html()) + "<div class=\"note move\" style=\"top: " + (rndtop) +"%; left: " + (rndleft) + "%; display: none;\">" + ($("#textareanote").val()) + "</div>"); $(".note").show(350); $("#textareanote").val(""); }); Ještě jedna chyba - po kliknutí se sice provedel řádek 5, ale řádek 4 ne... |
||
Chamurappi Profil |
Reaguji na RastyAmateura:
Co je v #main ? Všechno? Pokud ano, tak:
1) Nastavíš reakci na klik na element s id="newnotesubmit" .
2) Při kliku převedeš všechno na HTML kód a něco k tomu HTML přidáš. 3) Zrušíš všechno (včetně toho elementu s id="newnotesubmit" ).
4) Vytvoříš nové všechno (se zbrusu novým elementem s id="newnotesubmit" ) z HTML kódu.
5) Divíš se, že na novém elementu není nastavená reakce na klik. Převádění kusu DOMu na HTML následované převodem HTML zpátky na kus DOMu je dost destruktivní činnost (viz i starší popis). Nedělej to, pokud o tu destrukci úmyslně neusiluješ… |
||
RastyAmateur Profil |
Chamurappi:
Moc to nechápu var oldhtml = $("#main").html(); // (1) var nevhtml = oldhtml + "nove html"; // (2) // 3, 4 a 5 nechápu VYŘEŠENO: #main se skládá ze statické části a dynamické části. Tu dynamickou část jsem ohraničil divem a impletoval jsem to na řádek 5 ([#1]). Nyní vše funguje jak má (zatím) jinak samozřejmě děkuji Chamurappimu za reakci |
||
Chamurappi Profil |
#4 · Zasláno: 14. 1. 2016, 13:15:34
Reaguji na RastyAmateura:
Z těch dvou řádků je první to, co jsem napsal jako 2), a druhý to, co jsem napsal jako 3) a 4). Asi nad tím budeš muset víc přemýšlet, myslím, že jsem to popsal správně. „Tu dynamickou část jsem ohraničil divem a impletoval jsem to na řádek 5“ Proč máš vůbec potřebu převádět nějaký existující element na HTML kód? K čemu ti to je? |
||
RastyAmateur Profil |
#5 · Zasláno: 14. 1. 2016, 13:38:26
Přidával jsem přes ajax poznámku. A aby se zobrazila a nemusela se aktualizovat stránka, tak jsem to řešil tímto způsobem
|
||
Kcko Profil |
#6 · Zasláno: 14. 1. 2016, 13:46:17
RastyAmateur:
Změn to takhle $(document).on('click', '#newnotesubmit', function(){ |
||
RastyAmateur Profil |
#7 · Zasláno: 14. 1. 2016, 14:11:16
Kcko:
V čem to je lepší? |
||
Chamurappi Profil |
#8 · Zasláno: 14. 1. 2016, 14:33:08
Reaguji na RastyAmateura:
Dobrý záměr, špatná implementace. K tomu, abys něco někam přidal, přeci nemusíš přemazávat existující blok. „V čem to je lepší?“ Chytá to každé kliknutí na celé stránce a dodatečně to vyhodnocuje, jestli jsi kliknul do něčeho, co odpovídá selektoru #newnotesubmit . Pak můžeš přemazávat cokoliv, je to už fuk, protože klik se zachytí v rámci dokumentu. Což nic nemění na tom, že zničit skupinu elementů jen proto, abys je vytvořil znovu, není moc efektivní a koleduješ si tím o víc problémů, než jen zrušení navázaných událostí.
|
||
RastyAmateur Profil |
#9 · Zasláno: 14. 1. 2016, 14:41:35
Chamurappi:
A jaká by byla lepší impletace? Koukal jsem na ten odkaz, a řešení s += mi nefungovalo (je možné, že jsem to napsal špatně). „Chytá to každé kliknutí na celé stránce a dodatečně to vyhodnocuje, jestli jsi kliknul do něčeho, co odpovídá selektoru #newnotesubmit . Pak můžeš přemazávat cokoliv, je to už fuk, protože klik se zachytí v rámci dokumentu.“
Tak jestliže to zachycuje všechna kliknutí, tak bych tipoval, že to je spíše horší než lepší. Ovšem tu druhou větu moc nechápu - co znamená "být zachycený v rámci dokumentu"? |
||
Keeehi Profil |
#10 · Zasláno: 14. 1. 2016, 14:47:49
|
||
RastyAmateur Profil |
#11 · Zasláno: 14. 1. 2016, 15:14:17
Keeehi:
Přidáno, děkuji! |
||
Časová prodleva: 9 let
|
0