Autor Zpráva
tomyc
Profil *
Ahoj, mám na stránce udělané jednoduché kontextové menu vyvolané pravým tlačítkem. Po kliknutí pravým tlačítkem na vybrané prvky na stránce se vytvoří <div> do kterého se načte soubor kontextMenu.php. Tomuto souboru se zároveň odešlo informace na jaký prvek bylo kliknuto atd. Všechno funguje, ale s každým kliknutím pravým tlačítkem trvá otvírání kontextového menu déle a déle. Po refresh stránky se toto opakuje od začátku. V konzoli firefoxu jsem zjistil, že při prvním kliknutí se odešle 1x POST http://....../kontextMenu.php a 3x GET pro jednotlivé scripty. S každým dalším vyvolání menu se toto zdvojuje tzn. při druhém kliknutí 2xPOST a 6xGET, při třetím 4xPOST a 12xGET atd. až do pádu prohlížeče. Děkuji za případné rady

$('.clanky').mousedown(function(e){
    if (e.which==3) {
    $('#zatemneni').addClass("zatemneniStranky0");
    if (screen.availWidth<1200) {var sirkaStranky=screen.availWidth-20;var offsetX=10;} else {var sirkaStranky=1200; var offsetX=(screen.availWidth-1210)/2;}
    if ((e.pageX+170)>(sirkaStranky+offsetX)) {var osaX="right:5";} else {var osaX="left:" + (e.pageX-offsetX);}
    if ((e.pageY+200)>screen.availHeight) {var osaY="bottom: 5";} else {var osaY="top: " + e.pageY;}
    var clanekID=$(this).attr( "id" );
    var sekce=$("body").attr( "id" );
    var trida=$(this).attr( "class" );
    
    $('#popUp').html("<div id=\"kontextoveMenu\" style=\"position:absolute;" + osaY + "px;" + osaX + "px;\"></div>");
    $("#kontextoveMenu").load("soubory/kontextMenu.php",{clanekID: clanekID,sekce: sekce,trida: trida});
    
    }
  });
_es
Profil
tomyc:
při prvním kliknutí se odešle 1x POST http://....../kontextMenu.php a 3x GET pro jednotlivé scripty.
Aké skripty? V súbore kontextMenu.php máš nejaký JS? Prečo?
tomyc
Profil *
V kontextMenu.php scripty nemám, ale na každá stránce jsou <HEAD> odkazy na soubory se scripty, které se taky objeví v log firefoxu. Log vypadá takto

_es
Profil
tomyc:
na každá stránce jsou <HEAD> odkazy na soubory se scripty
Akej stránke? Stránka (súbor) kontextMenu.php? Alebo čo je to tá stránka? Na čo znovu načítavaš jQuery?
Však už načítaná je. Dodaj „živú“ ukážku.
tomyc
Profil *
Odkaz je tady http://81.90.253.27/novetomanovi login i heslo je host
Funkční je pouze sekce doma. Články zatím nemají žádnou grafickou úpravu. Obsahují pouze texty bez fotografií. Když na článek kliknete levým tlačítkem, otevře se. Když kliknete pravým tlačítkem, objeví se kontextové menu. V menu je zatím funkční pouze položka "otevřít" a "odstranit" (můžete vyzkoušet, článek se zatím nesmaže). Kontextové menu se zavře kliknutím mimo něj. Pokud toto budete dělat opakovaně, bude otvírání menu trvat déle a déle. Po refresh stránky se toto opakuje.
_es
Profil
tomyc:
V kontextMenu.php scripty nemám
Na začiatku výstupu skriptu kontextMenu.php je:
<script type='text/javascript' src='soubory/js/jquery.js'></script>
    <script  type='text/javascript' charset='WINDOWS-1250' src='soubory/js/scriptsJquery.js'></script>
    <script  type='text/javascript' charset='WINDOWS-1250' src='soubory/js/kontextMenuJquery.js'></script>
Teda sa ti to postupne množí, lebo jQuery metóda load interpretuje aj JS skripty a efekt je ako keby počet kliknutí exponenciálne narastal. Aký má vlastne zmysel, aby musel užívateľ čakať na načítanie výstupu PHP skriptu pri každom kliknutí myšou?
tomyc
Profil *
Aha, díky za upozornění. Tohle tam být samozřejmě nemělo. Zkusím to odstranit a odzkoušet. Načítání kontextového menu z php mám proto, že kontextové menu se mění podle oprávnění jednotlivých uživatelů tzn. každý má právo mazat a editovat pouze to co sám vložil atd. Nevím jak bych jinak tyto práva ověřil. Šlo by to ještě přes ajax, ale to se stejně nevyhnu odeslání dat na server a čekání na odpověď. Jediná možnost co mě ještě napadla by bylo ověřit oprávnění hned při načítání obsahu článků a ke každému článku. Tím se zase prodlouží načítání stránky i pro lidi, kteří chtějí články pouze číst a kontextové menu nepoužijí.


Tak jsem to odzkoušel a opakované odeslání zmizelo. Problém je v tom, že teď v tom kontextovém menu nefungují scripty. Když kliknu na položku např. odstranit, odstraní se nejprve kontextové menu a pak se objeví okno s potvrzením pro smazání. Toto bez načtení souboru kontextMenuJquery.js nefunguje. Vyřešil jsem to tak, že jsem script dal přímo do souboru kontextMenu.php. Konkrétně se jedná o toto

$('#smazClanek').click(function(e){ 
    
    $('#kontextoveMenu').remove();
    $('#zatemneni').removeClass("zatemneniStranky0");
  });

Pak všechno funguje jak má.
_es
Profil
tomyc:
kontextové menu se mění podle oprávnění jednotlivých uživatelů tzn. každý má právo mazat a editovat pouze to co sám vložil atd.
No ale to sa robí až po prihlásení, kedy by mali byť oprávnenia známe.

možnost co mě ještě napadla by bylo ověřit oprávnění hned při načítání obsahu článků a ke každému článku. Tím se zase prodlouží načítání stránky i pro lidi, kteří chtějí články pouze číst a kontextové menu nepoužijí.
Aké spomalenie? Veď po požiadavke na menu stačí len porovnať prihláseného s autorom príspevku. Alebo ani nie a mazanie a editovanie bude neoprávneným zamietnuté.

Šlo by to ještě přes ajax
Nerozumiem, teraz to podľa teba robíš ako?

Pochybujem, že je to menu po kliknutí na pravé tlačítko dobrý nápad. Čo návštevníci bez pravého tlačítka? Alebo, ako má niekto prísť na to, že má použiť pravé tlačítko? Prečo to nespravíš nejako normálnejšie?
tomyc
Profil *
Děkuji za rady. Oprávnění se nastavují po přihlášení. Pak se jen ověřuje zda je přihlášený uživatel autorem příspěvku. Já to řeším až v kontextovém menu a to tím, že vytvořím <div> pro menu a načtu do něho soubor kontextMenu.php. Určitě by to šlo i tím druhým způsobem. Jen jsem chtěl aby se v menu položky ke kterým nemá uživatel oprávnění nezobrazovaly popř. byly neaktivní. Samotné oprávnění např. k mazání ověřuji znovu při samotném mazání.
S tím pravým tlačítkem a kontextovým menu s tebou souhlasím. Za normálních okolností bych ho nepoužíval přesně z těch důvodů které píšeš. Jenže tohle je web určený pouze pro rodinné příslušníky a nejbližší známé. Sekce které jsou vidět jsou hlavně pro manželku :-) Nahrává si přes tento web a spravuje fotografie a články. Další věc na kterou má web sloužit, je přístup k domácí automatizaci. K části co zatím mám nelze přistupovat přes internet. A to chci změnit. Chci vše propojit se serverem a pomocí tohoto webu vše spravovat. Vzhledem k tomu, že je tam spousta nastavení, jeví se mi kontextové menu jako nejlepší řešení. Nelíbila by se mi řada ikonek jako odkazy na jednotlivé funkce. Vím že jsou další možnosti. Např. Menu vyvolávat kliknutím na tlačítko, ale já si zvolil toto řešení.
Jinak se omlouvám za hloupé dotazy, ale javascript používám pouze krátce.

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: