Autor Zpráva
SteveO
Profil *
Zdravím, včera jsem si udělal jQuery plugin pro modální okno, něco jako má pinterest.com, všechno funguje, ale všiml jsem si zajímavé věci.
Zkrátka - klepnu na odkaz, zobrazí se okno. Kliknu na zavřít, zavře se okno. Klepnu znova, otevře se okno, ale po kliknutí na zavřít už se funkce, která okno zavírá, provede dvakrát.
Po další klepnutí třikrát, atd. Zkrátka jako by se při každým otevření okna vytvořila nová instance pluginu se všemi funkcemi.

Přiřazení akce:
$("odkaz").click(function() { $("div s oknem").okenko(); });

A plugin:
(function($){

  $.fn.okenko = function(moznosti){

  var vychozi = {
    escZavreni: true,
    priOtevreni: function() {},
    priZavreni: function() {}
  };
  
  var moznosti = $.extend(vychozi, moznosti);
  
  var zavritOkno = function(okno) {
    
    vychozi["priZavreni"].call();

    .....
        
    }); });
    
  }
    
  return this.each(function() {
  
    alert("A");
  
    vychozi["priOtevreni"].call();

    var okno = $(this);

    .....
  
    $("#okno-prekryti, .zavrit-okno").live("click", function() { alert("B"); zavritOkno(okno); });
    
  });

  };
  
})(jQuery);

Po kliku na prvek, ke kterému je otevření okna přiřazeno, se alert "A" vyhodí vždycky jen jednou, což je správně, ale alert "B" vyskočí v tom počtu, po kolikáté už okno zavírám.
Prosím o radu, díky.
_es
Profil
SteveO:
ale alert "B" vyskočí v tom počtu, po kolikáté už okno zavírám.
...toľkokrát, koľkokrát sú spustené príkazy v 33 riadku. Okrem toho je lepšie definovať udalosti normálne na elementoch, na ktorých vznikajú, alebo využiť „prebublávanie“ udalostí a nie jQuery metódu live - je neefektívna.
SteveO
Profil *
Můžeš prosím uvést příklad? :)
_es
Profil
SteveO:
Príklad čoho? Veď si niekde nájdi, akými rôznymi spôsobmi sa priraďujú ovládače udalostí, či už s alebo bez jQuery.

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