Autor Zpráva
nethor
Profil
Zdravím, v rozsáhlejším projektu Ajaxem podle potřeby zobrazuji různé formuláře. Každý formulář pak používá vlastní obslužné scripty a funkce.
Doposud jsem načítal vždy 2 soubory fce.js a script.js, jejich velikost už jde ale do tisíců řádků a většina jejich obsahu se načítá zbytečně.
Upravil jsem to tedy tak, že se fpříslušné scripty a fce načtou až při zobrazení konkrétního formuláře. Funguje to, ale potíž je vtom, když formulář několikrát otevřu / zavřu /otevřu , tak se scripty na jednu akci začnou spouštět několikanásobně. Chápu, proč se to děje (trochu se divím, že nevyskakuje chyba cannot redeclare function),
Ale nevím, jak to ošetřit.
function RocniUzitek(Input){
    var Name        = $(Input).attr("name") ;  
    var Value         = $(Input).val() ;  
      $.post("Ajax.php?RocniUzitek" , {Name:Name, Value:Value }, function(Result){     
        $(".RocniUzitek").replaceWith(Result)    ;            
    });               
}


$("body").delegate('.RocniUzitek input', "change", function() {             
    RocniUzitek(this)    ;
});
Kajman
Profil
Co zavolat před delegate undelegate na odstranění původních událostí?

Nebo si v globálním objektu pamatovat, pro které formuláře už jsou funkce a události načtené, a načítat je jen, pokud ještě načtené nebyly.
nethor
Profil
Kajman:
Funguje! Děkuju:)

Tedy takhle:
$("body").undelegate('.RocniUzitek input', "change")    ;    //  Funguje
$("body").undelegate('.RocniUzitek')    ;              // Nefunguje
$("body").undelegate('.RocniUzitek input')    ;            // Nefunguje
Jen jsem nenašel způsob, jak to napsat pro všechny události (bez druhého parametru).
..ale bez toho se asi obejdu.
anonym_
Profil *
nethor:
A co takhle?

$(“.RocniUzitek”).undelegate()
nethor
Profil
anonym:
$(‘.RocniUzitek”).undelegate()
To jsem zkoušel, nefunguje.
_es
Profil
A čo tak len jednoducho pred načítaním skriptu overiť, či už nie je načítaný?
Napríklad, či existuje premenná či funkcia definovaná v skripte.

trochu se divím, že nevyskakuje chyba cannot redeclare function
Funkcia môže byť definovaná opakovane, platí posledná definícia s rovnakým názvom.
N71
Profil *
Berte to možná jako poznámku pod čarou, ale modularizace javascriptových skriptů už byla vynalezena. A podstatně líp. Například pomocí Webpacku. Lazy loading objektů je pak něco, co může fungovat zcela automaticky.

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