Autor Zpráva
Pepan223ER
Profil *
Ahoj, potřeboval bych poradit. Mám skript který mi ajaxem načte do stránky data (je to html seznam <ul> ). Položky v seznamu mají nastavenou akci na click, ale nic se neděje. Nevíte jak tento problém vyřešit?

Předem děkuji za pomoc
panther
Profil
Pepan223ER:
Nevíte jak tento problém vyřešit?
nevíme, co jsi kde vytvořil, nevíme, kde může být chyba. Přestaň tajnůstkařit a možná se dozvíš víc.
Pepan223ER
Profil *
HTML:
<ul id="sortable">
  <li class="menu_item" id="menu_item_1">Hlavní stránka</li>
  <li class="menu_item" id="menu_item_2">Projekty</li>
  <li class="menu_item" id="menu_item_3">Kontakt</li>
</ul>
<input type="button" value=" Uložit řazení položek " class="btn" id="menu_save_sort">


JavaScript:
<script>
  $(function() {
	 $(\'.menus\').click(function() {
    var menu = $(this).attr("id");
    $.post("./system/ajax/menu_select_menu.php", {id: menu}, function(output) {
      $("#sortable").html(output).show();
    });
   });
  });
		        
  $(function() {
    $(".menu_item").bind("click", function() {
      var item = $(this).attr("id");
      alert(item);
    });
	});
		        
  $(function() {
    $("#menu_save_sort").click(function() {
      var ooo = $("#sortable").sortable("toArray"); //serialize
      alert(ooo);
    });
	});
</script>
Pepan223ER
Profil *
První funkce vypíše podle zvolené kategorie potřebný seznam. Funkce funguje. Druhá funkce má vypisovat id daného prvku, na který se klikne. To funguje jen když jsou data načteny prvotně (pomocí PHP), nefunguje když jsou data načteny pomocí AJAXu, tedy po provedení první funkce. Třetí funkce funguje dobře.
Kcko
Profil
Pepan223ER:
Metoda live v kolekci jquery
pcmanik
Profil
Pepan223ER:
Len poznamka, $(this).attr("id") zmen na this.id

A preco mas prvy selektor so spatnymi lomenami?
Kcko
Profil
pcmanik:
Len poznamka, $(this).attr("id") zmen na this.id


Z jakého důvodu?
_es
Profil
Kcko:
Z jakého důvodu?
Viď: Doporučuji užívat standardní vlastnosti HTML DOMu místo getAttribute/setAttribute a jQuery - attr() a removeAttr() - problém v IE.
Kcko
Profil
_es:
Co doporučuje místní vekslák mě nezajímá. Příště se prosím nenamáhej.
Co se týká druhého odkazu, s popisovanou chybou jsem se nikdy nesetkal, ale i kdyby byla, autoři knihoviny si s ní určitě poradí.

Další téma na nenáviděnost Jquery frameworku a JS pure onanii si nechte do skauta.
_es
Profil
Kcko:
nenáviděnost Jquery frameworku a JS pure onanii
Uvedený výraz sa dá použiť aj v spolupráci s jQuery.
Akú má podľa teba výhodu použitie výrazu $(this).attr("id") pred výrazom this.id?
Ja vidím len nevýhody: dlhšie, pomalšie, hrozia komplikácie.
pcmanik
Profil
Kcko:
Trocha skludni utok, ako povedal es, je to kratsie na zapis, ale predovsetkym rychlejsie. Som zastancom jQuery, ale niektore veci su tam proste zbytocne. Z tvojho utoku je mi jasne, ze javascript neovladas, inak by si takuto hlupost nepovedal
Pepan223ER
Profil *
zpětná lomítka jsou zde proto, že jsem je zapomněl přepsat, mám totiž javascript zapsaný v PHP. Jakým způsobem by tedy šlo vyřešit tento problém? Metodu live jsem prostudoval, ale nevidím, jak bych jí použil :-/
Kcko
Profil
_es:
Standardní zápis. Pomalejší? Ano, ale o kolik? Lidským okem vnímatelnejší?
Pokud se průměrný uživatel naučí přistupovat k atributům přímo, tak mu nebude fungovat např. atribut rel

pcmanik:
Co Ti jasné je a není je mi ukradené. O mých znalostech víš kulový, tak nebagatelizuj.
Navíc tvoje rada uživateli Pepan223ER byla naprosto irelevantní a od věci, rozpoutala zbytečně diskusi a NEPOMOHLA MU.

Pepan223ER:
  $(function() {
    $(".menu_item").live("click", function() {
      var item = $(this).attr("id");
      alert(item);
    });
    });
Pepan223ER
Profil *
tak bohužel, přiklad od Kcko nefunguje. Stále funguje jen při prvním načtení stránky. Po aktualizaci AJAXem stále nefunguje :-/
pcmanik
Profil
Kcko:
Prepac no, ja sa mu len snazim naznacit rychlejsi, a kratsi kod, dokonca by som povedal jednoduchsi na pochopenie, ale nakolko je tu taky expert ako ty, (ktory tuto flame rozbehol). Tak sa ospravedlnujem ze sa snazim poradit....

A nejde o to o kolko je to rychlejsie, toto ma dnes udivuje, preco pisat kod, ktory bude rychlejsi? sak ty na svojej i7 rozdiel nepostrehnes lenze nie kazdy tu ma poriadny pocitac. Ked bude mat uzivatel pomalu odozvu, urcite ho to nenadchne a hned tu stranku opusti, samozrejme je to extrem, ale neni od veci dat si trocha namahy a optimalizovat trocha kod.

Nieco k veci, skus si pozriet:

jQuery FAQ
Kcko
Profil
Pepan223ER:
Nahoď živou ukázku.

pcmanik:
Radši nic, zbytečný flame. Ale díky, jdu hned přepsat všechny svoje kódy dle tvé rady a těším se na kosmickou rychlost :-D
To cos ted napsal podtrhuje toto Z tvojho utoku je mi jasne, ze javascript neovladas, inak by si takuto hlupost nepovedal
Pepan223ER
Profil *
děkuji všem za pomoc, zde uvádím pro ty, kteří budou mít stejný problém, správný kód:
$(function(){

$('li').live('click',function(){
alert("Klikls");
});

});
Chamurappi
Profil
Reaguji na Kcka:
Pokud se průměrný uživatel naučí přistupovat k atributům přímo, tak mu nebude fungovat např. atribut rel
Je rozdíl mezi atributem a vlastností. Vlastnost rel mu samozřejmě fungovat bude, pokud dotyčný element může mít atribut rel. Pokud ho nesmí mít, pak ho nesmí mít proto, že u něj atribut vyjadřující vztah aktuální stránky k cílové nedává žádný smysl (třeba u <div>u nebo u <li>).

Standardní zápis.
Tak mi se svými úžasnými znalostmi vysvětli, proč není v this už přímo $(this), pokud neomylní tvůrci posvátného jQuery nezamýšleli tento způsob použití. Bylo to jejich rozhodnutí — oni určili, co je v this, nezávisí to na nějaké tobě dosud neznámé vlastnosti OOP. Oni mohli dát do this přímo jQuery objekt a pak bys volal this.attr("id"). Proč to neudělali, pokud tvůj postup považují za standardní?

tvoje rada uživateli Pepan223ER byla naprosto irelevantní a od věci, rozpoutala zbytečně diskusi a NEPOMOHLA MU
Zefektivnila mu kód. Diskusi jsi zbytečně rozpoutal sám — zeptal ses na něco, na co jsi evidentně nechtěl slyšet odpověď, aniž bys měl nějaký skutečný protiargument. Příště ti v podobné situaci ušetřím nervy a smažu tě.


Reaguji na Pepan223ERa:
Potřebuješ pochopit, že JavaScript není CSS, každé prohledávání elementů funguje vždy jen v aktuálním prostředí dokumentu. Metoda live zařizuje, že se to prohledávání v různých momentech opakuje (mnohdy zbytečně). Ovšem pokud používáš nějaký plugin, který sám o sobě nepoužívá live (těch je mnoho, pravděpodobně i tebou použitý sortable), tak tě live nezachrání.

Pokud něco vyměníš v dokumentu (a je jedno, zda to přijelo zrovna AJAXem), je lepší zaměřit se přímo na místo změny a nastavit (jen v něm) těsně po změně (u AJAXu v callback funkci) vše, co nastavit potřebuješ. Jednak je to efektivnější než live, jednak je to někdy i jediná možnost. Neznamená to ale, že se musíš opakovat — stačí dát incializaci do funkce a tu zavolat jak z inicializace stránky, tak z callbacku.
_es
Profil
Kcko:
Standardní zápis.
Tak prečo je v oficiálnej dokumentácii jQuery používaný ten podľa teba neštandardný, napríklad http://api.jquery.com/map/?

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: