Diskuze: Zavření modalu volaného přes AJAX

PHP Nette Framework Nette framework Zavření modalu volaného přes AJAX

Aktivity (1)
Avatar
tbartolen
Člen
Avatar
tbartolen:24. května 16:50

Ahoj, mám Formulář v modalu, který překresluji přes snippet pomocí AJAX...Z formuláře ukládám data pak s nima nějak dál pracuju. Mám problém ten, že když klepnu na Uložit, tak se mi sice do DB data uloží, ale nezavře se ten modal. Zkoušel jsem už řešení toto:
https://stackoverflow.com/…al-with-ajax
A taky toto:

$("#myBtn").on('click', function(){
    $("#skladModal").modal("hide");
});

Moje latte vypadá asi takto :

<div class="modal fade" id="skladModal" tabindex="-1" role="dialog" aria-labelledby="skladModalLabel"
     aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">Nový zápis</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            {snippet sklad} {form skladDataForm, class=>'ajax form'}
            <div class="modal-body">

                <div n:class="form-group">
                    <div class="input-group">
                        <div class="input-group-addon">
                            {label XX}
                        </div>
                        {input XX, class=>'form-control'}
                    </div>
                </div>
                <div n:class="form-group">
                    <div class="input-group">
                        <div class="input-group-addon">
                            {label YY}
                        </div>
                        {input YY, class=>'form-control'}
                    </div>
                </div>
                <div n:class="form-group">
                    <div class="input-group">

                        {input dataId, value => $dataId}
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Zavřít</button>
                    <div id="myBtn" data-dismiss="modal" aria-hidden="true">
                        {input send, class=>"btn btn-primary"}
                    </div>
                </div>
                {/form}{/snippet}
            </div>
        </div>

Zavřít modal se má po kliknutí na input send uplně dole.

Nevíte, jak to donutit, aby se prostě po kliknutí na uložit, uložilo a zavřelo? Případně mám hledat chybu jinde než v latte a js? Díky za radu

Odpovědět 24. května 16:50
Navštiv www.fb.com/skkelticz
Avatar
Odpovídá na tbartolen
Martin Konečný (pavelco1998):24. května 17:40

Ahoj, to zavření ti nefunguje ani hned napoprvé, nebo až na druhé a další odeslání formuláře?
Resp. u Nette a snippetů je problém v tom, že když navěsíš událost na nějaký element (třeba tlačítko) a potom se přes snippety to tlačítko překreslí, tak zmizí i ta navěšená událost - tedy je potřeba ji navěsit znova.

Pokud se modal nezavře už hned při prvním odesílání ajaxu, tak bych problém viděl někde jinde.

Nahoru Odpovědět 24. května 17:40
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
tbartolen
Člen
Avatar
Nahoru Odpovědět 24. května 17:46
Navštiv www.fb.com/skkelticz
Avatar
tbartolen
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
tbartolen:24. května 18:00

Událost, jako že ten data-target="dismiss" ...?

Nahoru Odpovědět 24. května 18:00
Navštiv www.fb.com/skkelticz
Avatar
Odpovídá na tbartolen
Martin Konečný (pavelco1998):24. května 19:42

Jestli se nezavře vůbec, pak bych neviděl problém v souvislosti s Nette a formulářem. Nicméně tu JS knihovnu na modal okna neznám, tak nevím, zda používáš špatně ten příkaz, nebo je chyba někde jinde.

Událost jsem měl na mysli to

$("#myBtn").on('click', function(){
    $("#skladModal").modal("hide");
});

Pokud ten element #myBtn překreslíš přes snippety (po ajax požadavku), tak je potřeba tu událost navěsit znova. Tedy buď překreslit i samotný <script>, v callback metodě to ručně navěsit znova a nebo použít delegovanou událost

$(document).on("click", "#myBtn", function() {
        $("#skladModal").modal("hide");
});

Ale to mě původně napadlo jako možná příčina problému. Pokud se to okno nezavře ani při prvním kliknutí, pak bych problém viděl jinde.

Nahoru Odpovědět 24. května 19:42
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:25. května 7:28

Link na stranku nebo vypis chyb webove konzoly by nebyl?
Jak to popisujes, vypada to spis na javascriptovy problem. Nespravne napsany kod.Ale to se neda jinak nez nazivo testovat a sledovat vypis js/webove konzoly. Pokud to ani tam nenapise chybu, tak javascript prikaz zpracuje spravne, ale prikaz dela neco jineho nebo v nespravny cas nebo ho neco vyrusi. To se neda takhle z kousku kodu odhadnout. Pokud teda clovek nette moc nezna jako ja.
Jeste je tu moznost, ze si prepisujes cele jquery jinym jquery. To pak smaze vsechno do te chvile definovane, ruzne eventy a tak. Tim padem konzola treba nic nenapise.

Editováno 25. května 7:30
 
Nahoru Odpovědět 25. května 7:28
Avatar
dez1nd
Člen
Avatar
dez1nd:25. května 8:14
  1. není to tím, že máš snippet v modalu ? neměl by být celý modal ve snippetu ? Takhle se ti překresluje jen tělo modalu.
  2. jestli se nepletu, mohl by to dělat i ten samotný formulář ve snippetu
 
Nahoru Odpovědět 25. května 8:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.