Autor | Zpráva | ||
---|---|---|---|
HomerJay Profil |
#1 · Zasláno: 13. 11. 2010, 16:51:37
Neviem či, ale mám pocit že sa to robí cez JS.
Potrebujem spraviť niečo takéto [ ] [ZAMKNUTÁ KOLÓNKA] to prvé je checkbox, teda ten štvorček ktorý keď stlačím, označí sa. A teda chcem, aby sa po stlačení kolónka "odomkla", teda aby bolo do nej možné písať, no kým nebude checkbox označený, nech to nie je možné... Snáď chápete, asi blbo vysvetľujem :D Vďaka. |
||
imploder Profil |
#2 · Zasláno: 13. 11. 2010, 17:01:10
HomerJay:
řešení: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <script type="text/javascript"> function nastavZamknuti() { if (document.getElementById('odemykac').checked) document.getElementById('kolonka').disabled = false; else document.getElementById('kolonka').disabled = true; } </script> </head> <body> <input id="odemykac" type="checkbox" onchange="nastavZamknuti()"> <input id="kolonka" type="text" disabled> </body> </html> |
||
HomerJay Profil |
#3 · Zasláno: 13. 11. 2010, 17:04:40
Vďaka, mám otázku - dá sa to nejako obísť? Teda povedzme že toto budem mať na webe, ale je to možné obísť tak, že ak sa nezaškrtne kolónka, aj tak bude nejaký text napísaný?
(napr. použitím linku nieco.com/nieco.php?text=text - hádam vieš ako to myslím :D) |
||
Darker Profil |
#4 · Zasláno: 13. 11. 2010, 17:08:37
Ano dá se to obejít. Prostě na dané stránce spustím skript, který elementu nastaví disabled=false
Veškeré ochrany pomocí JS se dají obejít. |
||
imploder Profil |
#5 · Zasláno: 13. 11. 2010, 17:14:12
HomerJay:
„Vďaka, mám otázku - dá sa to nejako obísť? Teda povedzme že toto budem mať na webe, ale je to možné obísť tak, že ak sa nezaškrtne kolónka, aj tak bude nejaký text napísaný?“ Odpověděl sis vlastně sám: ano, např. zapsáním do URL se to obejít dá. Dá se to jednoduše obejít i když použiješ metodu POST a tak se parametry nebudou předávat v URL, jenom to nejde udělat z prohlížeče. Taky to, že input označený disabled nejde měnit, záleží jenom na prohlížeči a klidně může někdo shválně používat prohlížeč, který na disabled nebere ohled. Takže spoléhat na to, že input označený disabled se nebude měnit, se nedá. Pokud musí vstupy splňovat nějaké požadavky (např. že je prázdný, ale obecně cokoliv), je potřeba to kontrolovat na serveru (tj. v PHP skriptu). Všechno, co je udělané v javascriptu se dá obejít, javascript se dá vypnout nebo jakkoliv upravit. |
||
HomerJay Profil |
#6 · Zasláno: 13. 11. 2010, 17:18:24
Darker, imploder:
Vďaka, len som sa pýtal, aj keby to niekto obišiel, nejaký extra problém by to pre mňa neznamenal... len som sa chcel uistiť, vďaka za vysvetlenie :) |
||
HomerJay Profil |
#7 · Zasláno: 13. 11. 2010, 17:45:05 · Upravil/a: HomerJay
Jo ešte mám otázku - ako urobiť viac takýchto odomykačov bez toho, aby som musel každý definovať v JS samostatne? Keby chcem tých kolóniek napríklad 20...?
EDIT: ešte jednu: Ak niekto zaznačí, do kolónky napíše hodnotu a potom odznačí, text nezmizne. Pri odoslaní sa hodnota odošle alebo nie? |
||
imploder Profil |
#8 · Zasláno: 13. 11. 2010, 17:53:34
HomerJay:
„Jo ešte mám otázku - ako urobiť viac takýchto odomykačov bez toho, aby som musel každý definovať v JS samostatne? Keby chcem tých kolóniek napríklad 20...?“ V javascriptu se dá zapisovat do stránky pomocí document.write(). Takže třeba to zaškrtávátko se dá vypsat takhle: document.write('<input id="odemykac" type="checkbox" onchange="nastavZamknuti()">'); Každý odemykač a kolonka musí mít vlastní id, takže je potřeba je očíslovat - příklad: document.write('<input id="odemykac' + cislo + '" type="checkbox" onchange="nastavZamknuti()">'); |
||
Darker Profil |
#9 · Zasláno: 13. 11. 2010, 17:56:24 · Upravil/a: Darker
No asi celkově úspornější řešení:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <input id="odemykac" type="checkbox" onchange="this.nextElementSibling.disabled=this.checked"> <input id="kolonka" type="text"> </body> </html> |
||
imploder Profil |
#10 · Zasláno: 13. 11. 2010, 17:58:19 · Upravil/a: imploder
HomerJay:
„Pri odoslaní sa hodnota odošle alebo nie?“ Co takhle vyzkoušet? Darker: Jo, to je šikovné řešení. |
||
HomerJay Profil |
#11 · Zasláno: 13. 11. 2010, 17:59:33
imploder:
Číslovanie chápem, lenže keď "odemykac" v inpute očíslujem, musím ho znova definovať očíslovaný aj v <head>, nie? Myslel som či sa nedá použiť niečo ako odemykac[0], odemykac[1], atď. s jednou jedinou definíciou v <head>. Darker: Sjúpr, čo to robí? Nefunguje mi to totiž :D |
||
imploder Profil |
#12 · Zasláno: 13. 11. 2010, 18:08:12 · Upravil/a: imploder
HomerJay:
„Sjúpr, čo to robí? Nefunguje mi to totiž :D“ Dělá to to samé, co potřebuješ, akorát opačně (když se checkbox zaškrtne, políčku se nastaví disabled a když se zruší zaškrtnutí, tak se odnastaví - ty to potřebuješ naopak). Nefunguje to kvůli tomu, že tagy nejsou přímo u sebe - jsou mezi nima nějaké bílé znaky (konec řádku, 2 mezery). Kvůli tomu nextElementSibling odkazuje na ty mezery a ne na druhý <input>. Bez mezery to funguje: <body> <input type="checkbox" onchange="this.nextSibling.disabled=this.checked"><input id="kolonka" type="text"> </body> |
||
HomerJay Profil |
#13 · Zasláno: 13. 11. 2010, 18:12:49
imploder:
Aha... tak vďaka, je to pekné, ale ja potrebujem aby sa kolónka zviditeľnila keď je to zaznačené, nie odznačené... |
||
Darker Profil |
#14 · Zasláno: 13. 11. 2010, 18:13:10 · Upravil/a: Darker
A jak to udělat, aby to bralo až nějaký první objekt (div, input atd)?
Ukázka :) HomerJay: „zaznačené, nie odznačené“ this.nextSibling.disabled=!this.checked Negace |
||
HomerJay Profil |
#15 · Zasláno: 13. 11. 2010, 18:20:06
Darker:
Tá negace mi neurobí nič, teraz je kolónka odomknutá aj pri zaznačenom aj odznačenom :D |
||
imploder Profil |
#16 · Zasláno: 13. 11. 2010, 18:27:53
Darker:
Zkus si to mimo zkoušečku normálně v <body>, mně to aspoň ve Firefoxu s mezerou nefunguje, jenom bez mezery. |
||
imploder Profil |
#17 · Zasláno: 13. 11. 2010, 18:31:23 · Upravil/a: imploder
Tak sem hodím svoji verzi, tohle funguje:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <script type="text/javascript"> function nastavZamknuti(odemykac) { odemykac.nextSibling.disabled = !odemykac.checked; } </script> </head> <body> <input type="checkbox" onchange="nastavZamknuti(this)"><input id="kolonka" type="text" disabled> <input type="checkbox" onchange="nastavZamknuti(this)"><input id="kolonka" type="text" disabled> <input type="checkbox" onchange="nastavZamknuti(this)"><input id="kolonka" type="text" disabled> </body> </html> HTML element může předat sám sebe (tj. this) jako parametr funkci. EDIT: dal jsem tam 3 inputy (aby bylo vidět, že to funguje i na víc než jeden) a u kolonky disabled, na které jsem zapomněl |
||
HomerJay Profil |
#18 · Zasláno: 13. 11. 2010, 18:47:43
imploder:
Funguje perfektne, vďaka :) |
||
Časová prodleva: 13 let
|
0