Autor Zpráva
gully
Profil
Zdravím všechny a chtěl byb poprosit o pomoc. Z nějakýho důvodu, na který se mi nedaří přijít, mi nefunguje tlačítko pro odeslání emailové adresy. Formulář je na této stránce.

Kód pro formulář:
<div class="container padding-top text-center">
    <div class="row">
        <p class="bold">Odebírat týdenní menu e-mailem:</p>
    </div>
    <div class="row">
        <form class="form-inline" action="registrace-tydenni-menu.php" method="post" id="odber-tydeni-menu">
            <input type="email" class="form-control" id="tydenni-menu-email" size="20" placeholder="Vložte e-mail">
            <button type="submit" class="btn btn-primary">Odeslat</button>
            <div style="padding-top: 4px">
                <p class="small text-center">
                    Po odeslání prosím přejděte do uvedené e-mailové schránky a potvrďte odběr kliknutím na odkaz, který jsme vám poslali.
                </p>
            </div>
        </form>
    </div>
</div>
<script>
    $("#odber-tydeni-menu").submit(function(event){
        event.preventDefault();
        var post_url = $(this).attr("action");
        var request_method = $(this).attr("method");
        var form_data = $(this).serialize();

        $.ajax({
            url : post_url,
            type: request_method,
            data : form_data
        }).done(function(response){
            $("#server-results").html(response);
        });
    });
</script>

Předem díky za pomoc.
Serg
Profil *
To bude asi tím, že ten input nemá atribut name.
gully
Profil
Serg:
V tom chyba není. Atribut name není potřeba zadávat. Když ten kód zkopíruješ do samostatného souboru html, tak to funguje.
Kajman
Profil
Máte tam na tom formuláři dvě události. K této druhé se nedostane. Sežere to první validační.
gully
Profil
Kajman:
Můžete mě popostrčit? Já tam žádnou validační událost nevidím.
<div class="container padding-top text-center">
    <div class="row">
        <p class="bold">Odebírat týdenní menu e-mailem:</p>
    </div>

    <form class="form-inline" action="registrace-tydenni-menu.php" method="post" id="odber-tydeni-menu">
        <div class="row">
            <div class="form-group">
                <input type="email" class="form-control" id="tydenni-menu-email" size="20" placeholder="Vložte e-mail" required="required">
                <button type="submit" class="btn btn-primary">Odeslat</button>
                <div style="padding-top: 4px">
                    <p class="small text-center">
                        Po odeslání prosím přejděte do uvedené e-mailové schránky a potvrďte odběr kliknutím na odkaz, který jsme vám poslali.
                    </p>
                </div>
            </div>
        </div>
    </form>
</div>
Kajman
Profil
Když si dám v prohlížeči F12, tak u toho formuláře je označení event. Nyní je kód z [#1] zapoznámkovaný, tak tam zůstal jen jeden.
img.djpw.cz/zep.png
lionel messi
Profil
gully:

Já tam žádnou validační událost nevidím.


V súbore jqBootstrapValidation.js (premenná uniqueForms sa deklaruje o niekoľko riadkov vyššie):

$(uniqueForms).bind("submit", function (e) {
          var $form = $(this);
          var warningsFound = 0;
          var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter);
          $inputs.trigger("submit.validation").trigger("validationLostFocus.validation");
gully
Profil
Kajman:
V developerské liště v Chromu se mi ten event nezobrazuje, dá se to to nějak zapnout?

lionel messi:
Ano, je to tak.

Ale nedaří se mi to vypnout/poslat dál. Zkoušel jsem to neúspěšně vyčíst z kontaktního formuláře naspodu stránek, který byl součástí html šablony. Můžete mi poradit?
lionel messi
Profil
gully:
přidal formu atribut novalidate,

Ak chápem správanie tohto atribútu správne, vypne len predvolenú HTML validáciu v prehliadači, nie Javascriptovú, ktorú potrebuješ ovplyvniť.

Skús niekde do kódu (pre istotu čím nižšie, tým lepšie) pridať čosi takéto:

$(document).ready(function () {
  $("#contactForm").off("submit");
})

To by malo zabezpečiť odstránenie udalosti na konkrétnom formulári.

Pozn.: Netestované
Serg
Profil *
On je tam teď vidět jen ten jeden event, protože je ten <script> pod formulářem zakomentovaný. Jinak by si s tím teoreticky mělo jQuery poradit a ty eventy probublat. Ten bootsrapValidation to zastaví, jen když to neprojde validací, což je podle mě v pořádku.

gully:
V tom chyba není. Atribut name není potřeba zadávat. Když ten kód zkopíruješ do samostatného souboru html, tak to funguje.
Jako, dost to pak pomáhá se k těm datům pak dostat. Zkusil jsem, co to pošle na server, když tam nezadám name. V $_POST ani $_REQUEST nebylo vůbec nic, nečekaně :D
Navíc to chceš posílat AJAXem a očividně použít funkci .serialize(), a ta jak se zdá, nezahrne inputy, které nemají name. Můžeš si zkusit do toho pole něco zadat, a pak v konzoli zavolat $("#odber-tydeni-menu").serialize(), a potom tomu poli dát nějaké jméno, a zase zavolat tu funkci.
Možná se to tak chová jen na Mozzile, nevím. Ale .serialize() by se takle mělo chovat ve všech prohlížečích.

Ale nejdřív by to chtělo vůbec vyřešit, aby se to dostalo k tomu správnému eventu, třeba pomůže ten <script> odkomentovat.
Kajman
Profil
Asi bych upravil soubor /js/contact_me.js tak, aby nezpracovával všechny inputy na stránce, ale jen z kontaktního formuláře.

Tedy
$("input,textarea")...
nahradil za
$("#contactForm").find("input,textarea")...

Edit: chrome to má trošku jinak
img.djpw.cz/bfp.png
gully
Profil
Už to šlape. Všem mockrát děkuju za pomoc.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0