Autor Zpráva
Pacl
Profil
Dobrý den,

mám např. stranka.php, která obsahuje div. Do toho třeba pomocí funkce .html() naplním obsah, který si načtu pomocí AJAXU ze stránky zdrojDat.php. V těch datech bude i např. obrázek, který má id=neco.

stranka.php má odkaz na script.js ve kterém je handler na kliknutí na id neco. Problém je v tom, že při kliknuti na obrázek není žádná reakce, protože on ten hendler hledá na stránce zdrojDat.php která je zdrojem dat a né na stránce stranka.php.

Mohli byste mi nějak v tomto směru pomoct jak to vyřešit ?
Joker
Profil
Pacl:
Spíš tipuji problém v tom, že když „stranka.php má odkaz na script.js“, spustí se ten skript už při načítání stránky, žádný prvek s tím id nenajde a tím to skončí.
Po načtení toho dodatečného HTML kódu je potřeba spustit kód, který najde ten (teď už existující) prvek a pověsí na něj obsluhu události.
pcmanik
Profil
Pacl:
$('body').on('click', '#nejakeID', function() {
  ...
});
Amunak
Profil
Cokoliv, co chceš vykonat (připojení handlerů) na obsahu, který získáš až v AJAX requestu, musíš provést až v callbacku toho AJAX requestu. Tedy nejspíš za částí, kde pomocí .html vkládáš ten obsah.

Může to vypadat třeba takto:
// soubor s funkcí handleru
var provedeSePoKliknutiNaIdNeco = function(){
    alert('provedlo se kliknutí');
};

//AJAX
$.get('obsah.html', function(data) {
    $('#vysledek').html(data); //vložím přijatá data do #vysledek
    $('#id-neco').on('click', provedeSePoKliknutiNaIdNeco); //přiřadím funkci, která se má provést
});

Případně se může i obsah té funkce napsat přímo do handleru jako anonymní funkce.
pcmanik
Profil
Amunak:
Nemusí to robiť v callbacku stačí priradiť udalosť na rodiča a odchytávať kliknutia na potomkoch, ako v mojom prípade.
Pacl
Profil
Díky moc, řešení
$('body').on('click', '#nejakeID', function() {
  ...
});

to vyřešilo :-)

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: