Zamezení odchycení událostí v jquery po překreslení snippetu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ondrys
Člen | 3
+
0
-

Zdravím,

chtěl jsem požádat o osvětlení někoho znalého:

  • mám tabulku dat, která má na konci tlačítko, obalené <a class=„ajax“> pro další překreslení jiného snippetu
  • v jquery je definována obslužná fce po kliknutí na tlačítko

to fungovalo dokud:

  • tabulka je samostatný snippet (funkce záložek)
  • po překresleni snippetu záložek (včetně tlačítek) přestanou reagovat všechny obslužné akce z jquery

Prvotně jsem se bál, že jsem porušil bind po ajax překresleni snippetu, ale došel jsem k zjištění:

Když překreslím snippet záložek, tak všechny události objektů uvnitř <a class=„ajax“> jsou odchyceny a já nevím jak tetno stav změnit.
Po odstranění třídy ajax je vše funkční, ale to by znamenalo, že handle volaný tlačítkem (odkazovaný v <a class=„ajax“>) musim volat spolu s obslužnými funkcemi v jQuery přes ajax?

Předem děkuji za korekci a případná doporučení co dělam špatně…

Čamo
Člen | 798
+
0
-

Dynamicky generované elementy, musia mať obsluhu udalosti naviazanu cez metodu delegate naviazanu na kontainer.

Editoval Čamo (26. 4. 2014 10:57)

Ondrys
Člen | 3
+
0
-

Čamo napsal(a):

Dynamicky generované elementy, musia mať obsluhu udalosti naviazanu cez metodu delegate naviazanu na kontainer.

Můžeš to prosím tě nějak specifikovat víc? Jelikož v jQ používám v tuto chvílí $(document).on… a delgate je vpodstatě stejný princip, jen nerozumím jak to myslíš s tím konteinerem (jakým?)..

Moc dík

Čamo
Člen | 798
+
0
-

Bez kódu to asi ťažko niekto rozlúšti.
Tým kontajnerom som myslel tiež nejaký nadradený prvok…
Skúšal som si pridať element a funguje aj .on() tak teraz neviem.

Ondrys
Člen | 3
+
0
-

Snad tedy kód osvětloi to co jsem se snažil popsat :-)
Zjednodušený příklad template:

<div n:snippet="output" >
  Obsah záložky:
  <div n:foreach="$ingredientList as $ingred">
    Prvek {$ingred->id}
    <a n:href="update!  'idI' => $ingred->id" class="ajax">
      <button class="info">info</button>
    </a>
  </div>
</div>

<script>
$(function () {
  $.nette.init();

  $(document).on('click', 'button', function(e) {
    console.log($(this).attr('class'));
  });
});
</script>

V presenteru zejišťuji překreslení záložky (plně funkční):

public function handleChangeTab($idT)
{
   $this->tables = $idT;

   $this->redrawControl('output');
}

Ale po překreslení snippetu se nesplní událost $(document).on(‚click‘, ‚button‘, function(e).
Proto mě zajíma jestli to je má chyba a někde něco dělám špatně a nebo tomu nette.ajax sam zabraňuje, protože po odstranění třídy ajax z <a> výše popsaný problém nevznikne (viz popis na začátku).

Díky

Editoval Ondrys (27. 4. 2014 14:57)