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>
Vzhledem k tomu že je tam required="" tak nedovolí formulář odeslat pokud je prázdný.


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>
Pokud odpojím internet a pokusím se formulář odeslat...

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
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
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 *
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
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 *
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
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 *
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
Omlouvám se nemyslel jsem to špatně. Pokusím se tedy poohlédnout jinde.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0