| 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: 4 roky
|
|||
0
