Autor Zpráva
Cipísek055
Profil *
Dobrý den,

chtěl bych se poradit.
Aktuálně "vkládám" přes ajax hodnoty (např. výpis produktů) do modálního boxu..
Mám na to vytvořené speciální funkce, které fungují následovně

-> mám odkaz který má třídu "modalOpen" (což spouští - otvírá modalBox) který ovšem data načte přes $.ajax({})..
To vše proběhne krásně, produkty atd. se mi vypíšou v modálním boxu atd..

Ovšem, v tom modálním boxu již nefunguje JS (aktulní funkce všechny), jelikož jsou ty data nově vnořené, tak neznají načtené ostatní JS.
Chci se zeptat, jestli by mohl někdo poradit, jak toto řešit.
Musel bych do toho modálního boxu zvlášť vložit <script type..na všechny JS soubory.,.,což mi přijde nelogické)

Snad mě chápete, děkuji.
Keeehi
Profil
Cipísek055:
Musel bych do toho modálního boxu zvlášť vložit <script type..na všechny JS soubory.
No to asi ne. Pokud nepoužíváš rámy, což asi ne, tak se ty javascriptové funkce týkají i nových elementů. Stačí tedy ty funkce navázat i na události na nově vytvořených elementech.
Ještě je možnost události zaznamenávat na rodiči který se nemění, který je pak jakoby deleguje na své potomky. V této variantě je pak jedno, zda potomci vznikli nově nebo ne.
Cipísek055
Profil *
Nemám to přes iframe, běžně ajaxem načtu obsah a vložím / načtu ho do modal. okna přes JS...

Právě, zde mi ale již nefungují žádné scripty ( v tom načteném vnořeném obsahu )
Scripty mám na běžně na konci html souboru...
Slark
Profil
Vyzkoušejte proto tu delegaci nad rodičem jak navrhuje Keeehi. Akce na otevření modalu přes jQuery může vypadat třeba takto:

$("body").on("click", ".modalOpen", function(){
 $(".modalBox").show();
});

nebo pokud jde o bootstrap modal tak je to tuším $(".modalBox").modal("show");
Keeehi
Profil
V čistém javascriptu by to vypadalo nějak takto:
document.addEventListener("click",function(e) {
    if (e.target && e.target.matches(".modalOpen")) { 
        document.getElementsByClassName('modalBox').forEach(function (element) {
            element.style.display = 'block';
        });
    } 
}); 

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: