Autor | Zpráva | ||
---|---|---|---|
radekbar Profil |
Nejsem profík a jen lepím to co se po netu dočtu.
Mám jednoduchý formulář <!DOCTYPE html> <html> <body> <h2 style="margin: 0 0 15px;">TEST</h2> <form action="#" id="submit-form"> <label>textarea</label><br> <textarea name="kontakt-info" id="kontakt-info" required="" accesskey="t" rows="3" cols="20"></textarea><br><br><br><br> <input type="submit" value="Submit" id="submit-button"> <label id="internet-connection-error" style="color: #F44336;"></label> </form> </body> </html> ![]() Nyní přidám skript který před odesláním kontroluje internetové připojení. <!DOCTYPE html> <html> <body> <h2 style="margin: 0 0 15px;">TEST</h2> <form action="#" id="submit-form"> <label>textarea</label><br> <textarea name="kontakt-info" id="kontakt-info" required="" accesskey="t" rows="3" cols="20"></textarea><br><br><br><br> <input type="submit" value="Submit" id="submit-button"> <label id="internet-connection-error" style="color: #F44336;"></label> </form> <script> document.getElementById("submit-button").onclick = function(event) { event.preventDefault(); var online = isOnline() if (online) { document.getElementById("submit-form").submit(); return; } document.getElementById("internet-connection-error").innerHTML = 'Internet connection not availablem please check your internet connection.' }; function isOnline() { return ( navigator.onLine) } </script> </body> </html> ![]() Dokud nepřipojím internet formulář neodešlu. No jo jenže tady je problém, tím scriptem jsem zabil ochranu required a lze odeslat i prázdná textarea. Prosím o pomoc, jak to udělat aby byly obě ochrany funkční. |
||
Keeehi Profil |
#2 · Zasláno: 16. 7. 2022, 13:06:30
Máš pár možností.
1) kontrolovat si obsah textarea sám v javascriptu 2) místo volání submit na formuláři vyvolej clickna odesílacím tlačítku 3) snad by mělo fungovat i checkValidity |
||
radekbar Profil |
Mohl bych poprosit o praktickou ukázku, tj upravit ten kód co mám. :)
Nejlepší by bylo zachování required jelikož to má tu drobnou výhodu že to vyskočí uživateli v jeho rodném jazyce že musí pole vyplnit. |
||
radekbar Profil |
Tak nakonec pokusy jsem docílil funkčního řešení.
<!DOCTYPE html> <html> <body> <h2 style="margin: 0 0 15px;">TEST</h2> <form action="#" id="submit-form" onsubmit="formular()"> <label>textarea</label><br> <textarea name="kontakt-info" id="kontakt-info" required="" accesskey="t" rows="3" cols="20"></textarea><br><br><br><br> <input type="submit" value="Submit"> </form> <script> function formular() { event.preventDefault(); var online = isOnline() if (online) { document.getElementById("submit-form").submit(); return; } alert('Internet connection not availablem please check your internet connection.') }; function isOnline() { return ( navigator.onLine) } </script> </body> </html> |
||
radekbar Profil |
#5 · Zasláno: 16. 7. 2022, 16:17:59
Funguje to sice dobře ale ve zkutečnosti to nekontroluje internet jako takový ale pouze zda je zařízení připojeno k síti a nikoliv zda je na ní funkční net.
|
||
anonym_ Profil * |
#6 · Zasláno: 16. 7. 2022, 18:55:38
radekbar:
Tak JS nemá jak zjistit, jestli máš aktivní připojení k internetu. Jedině by sis někam pingnul AJAXem před tím odesláním. |
||
radekbar Profil |
#7 · Zasláno: 17. 7. 2022, 12:16:00
Našel jsem toto, jen nevím jak to celé zakomponovat. Nejlépe kombinace všeho dohromady.
Je vyplňená textarea? > je připojená síť? > a je na síti net? > pokud vše ano tak submit. Vlastně první dva kroky mi už fungují. |
||
anonym_ Profil * |
#8 · Zasláno: 17. 7. 2022, 12:26:29
radekbar:
Tak ten tvůj odkázaný script periodicky kontroluje online stav, což ty nepotřebuješ (je to spíše monitoring nějaké služby scriptem, který běží nonstop). Ty to můžeš celé odesílat AJAXem a ten buď proběhne a vrátí OK ( XMLHttpRequest.readyState == 4 ), chyba připojení a neodeslání požadavku na server by mělo být indikováno nulou.
|
||
radekbar Profil |
#9 · Zasláno: 17. 7. 2022, 12:52:12
Bohužel mé znalosti nedosahují toliko abych tohle celé poskládal. Uměl by jste to zasadit do posledního řešení co jsem posílal?
|
||
anonym_ Profil * |
#10 · Zasláno: 17. 7. 2022, 23:32:59
radekbar:
Mezi mou a tvou odpovědi uteklo natolik málo času, ze jsi se ani neobtěžoval podívat se, co ze to ten AJAX je a co jsem tou odpovědi vlastně myslel. Takže ne, nebudu ti posílat kód, který vezmes a okopirujes, trochu se prosím dovzdelej (sekundární důvod je, ze na tabletu fakt kódy psát nebudu, u počítače nyní nejsem). Jedna se o základní ajaxovy request, který ti zabere asi… asi tak 5 řádku. Případně se na to cele vyprdni, protože pokud není internet, formulář se ani nenacte. Pokud se nacte a není kilometrovy, je šance, ze bude on-line i při odeslání. Pokud kilometrovy je a spojení mezitím spadne, skončí odeslání na chybě připojení, takže se odesílatel dozví, ze nebyl odeslán včetně důvodu. |
||
radekbar Profil |
#11 · Zasláno: 18. 7. 2022, 09:46:37
Omlouvám se nemyslel jsem to špatně. Pokusím se tedy poohlédnout jinde.
|
||
Časová prodleva: 3 roky
|
0