Registrace událostí – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Registrace událostí – JavaScript, AJAX, jQuery – Fórum – Programujte.comRegistrace událostí – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

Colpik0
Super člen
10. 2. 2008   #1
-
0
-

Dělá mi problém registrace událostí.
např.:

<script type="text/javascript">

document.getElementById('prvek').onMouseDown = mojeFunkce;
function mojeFunkce() {
//nějaký kód
}
</script>

Dělám něco zásadního špatně (nějakou blbou chybu) nebo si mám zkontrolovat zbytek kódu?

----------------------------------------------------------------------------

Ještě bych se tak mimochodem zeptal, jak byste řešili drag-and-drop (myslím prostě přemísťování objektů kliknutím a táhnutím, ne nějaké automatické rovnání)? Nechci odkaz na tutoriál, jen se ptám jak byste to řešili vy.

Nahlásit jako SPAM
IP: 86.49.124.–
Pavel 'Colpik' Tobiáš - Developer & Music Producer [br] http://colpik.webstudio4u.eu
Nefaritus
~ Redaktor
+2
Posthunter
11. 2. 2008   #2
-
0
-

moýná máš chybu právě v té funkci...hoď to sem celý ;o)

Nahlásit jako SPAM
IP: 213.191.111.–
Colpik0
Super člen
11. 2. 2008   #3
-
0
-

To Nefaritus : Jsem na úplném začátku projektu a nechtěl jsem události psát jako atributy do elementů (přijde mi to hrozně neelegantní :smile1: ), tak jsem chtěl vyzkoušet registraci událostí ve skriptu... opravdu jen vyzkoušet - mojeFunkce() zatím obsahuje jen alert('Hello, world!');, takže by bylo skutečně zbytečné ji tady uvádět :smile1: . Není třeba možné, že se nedá registrovat událost objektu zjištěného pomocí metody getElementById()?

Nahlásit jako SPAM
IP: 86.49.124.–
Pavel 'Colpik' Tobiáš - Developer & Music Producer [br] http://colpik.webstudio4u.eu
safoo0
Duch
11. 2. 2008   #4
-
0
-

Fakt netusim co tam je zle.

Nahlásit jako SPAM
IP: 147.231.52.–
Orcslayer0
Stálý člen
11. 2. 2008   #5
-
0
-

V onmousedown všechna malá písmena dej. ,)
Edit: Jak bych to řešil já - při události bych vzal aktuální polohu myši a začal zpracovávat interval navázaný na body onmousemove, který by ověřoval změny - při změně změna polohy, při druhé události konec zpracovávání intervalu... Ale nezkoušel jsem, musím si to ověřit, jak dobře to půjde. :)

Nahlásit jako SPAM
IP: 85.70.82.–
pawlik0
Grafoman
12. 2. 2008   #6
-
0
-

Musis tu funkci nejdriv definovat

Nahlásit jako SPAM
IP: 84.42.152.–
Sa Nata A Na. Howgh
Colpik0
Super člen
12. 2. 2008   #7
-
0
-

To pawlik : Wow, díky :smile1: Já věděl, že to bude blbá chyba.

Nahlásit jako SPAM
IP: 86.49.124.–
Pavel 'Colpik' Tobiáš - Developer & Music Producer [br] http://colpik.webstudio4u.eu
pawlik0
Grafoman
12. 2. 2008   #8
-
0
-

Taky jsem ji dlouho nemohl najít :) až strejda Google pomohl :)

Nahlásit jako SPAM
IP: 84.42.152.–
Sa Nata A Na. Howgh
Orcslayer0
Stálý člen
12. 2. 2008   #9
-
0
-

To pawlik : Nejdřív se definovat fce nemusí. Zkus to prohodit, půjde to i tak. ,)

Nahlásit jako SPAM
IP: 85.70.82.–
Petroff0
Věrný člen
19. 2. 2008   #10
-
0
-

drag n drop
princip:
( během přesouvání musí mít prvek position:absolute)
A) V momentu události onmousedown zjistit pozici prvku start={x,y} a uložit posun=getMousePos()-start,
- nastavit prvku onmousemove:

var mMove=function(e) { ....
object.style.top = getMousePos().y - posun.x;
object.style.left = getMousePos().x - posun.y;
}
- nastavit prvku onmouseup (pokud není použitý trvale jako document.onmouseup)
B) V momentu události onmouseup vynulovat prvku onmousemove

Napadly mě tyhle varianty
1. jen 1 prvek vybavený touto schopností
2. každý prvek který bude označený (třebas class="dragable") lze přesouvat
3. Univerzál => funkce (které předáš xpos, ypos a HTML kód) vytvoří přemísťovatelný objekt a umístí ho na dané souřadnice

U všech 3 způsobů je třeba:
funkce getMousePos() , která pokud dojde ke scrollingu dokumentu musí zahrnout i toto (musí dát abs.souřadnice vzhledem k poč.dokumentu)

Ad1 nejjednodušší: prvku se nastaví position,top,left,onmousedown,onmouseup

Ad2+3 Použije se document.onmousedown/onmouseup.
přetahovaný obrázek se umístí vždy nad ostatními aniž se změní jejich z-pořadí

Ad2 Ve fázi A je třeba spočítat top a left prvku (nutno iterovat přes parenty) a nastavit mu position absolute.
Určovat překrývání prvků navzájem jde jedině neustálým zvyšováním last z-indexu (teoreticky by jednou přetekl...v praxi snad ne).

Ad3 Použije se document.onmousedown/onmouseup.
(makeDragable, removeDragable a Drag zaktualizují seznam objektů a podle jejich pořadí jim nastaví hodnoty z-index)
Použití např. obrázková galerie:

var images=["petr.jpg","pavel.jpg","olda.jpg"];

for(i=0;i<images.length;i++) makeDragable(20*(1+i),10*(1+i),"<img src='"+images[i]+"' />")
/*********/

Nahlásit jako SPAM
IP: 89.102.96.–
Colpik0
Super člen
27. 3. 2008   #11
-
0
-

Kdyby náhodou někdo řešil podobný problém s registrací událostí, chtěl bych ještě doplnit, že jsem našel mnohem hezčí způsob (který však bohužel nefunguje v IE :smile11: ), a to Event Listener obsažený v DOM Level2.

<script type="text/javascript">

function pozdravSvet() {
alert("Ahoj, světe!");
}
document.addEventListener( "click", pozdravSvet, true ); //po kliknutí na tělo dokumentu se spustí funkce pozdravSvet()
</script>

Více na http://en.wikipedia.org/wiki/DOM_Events#DOM_Level_2

Nahlásit jako SPAM
IP: 78.102.176.–
Pavel 'Colpik' Tobiáš - Developer & Music Producer [br] http://colpik.webstudio4u.eu
Orcslayer0
Stálý člen
27. 3. 2008   #12
-
0
-

To Colpik : IE má jiný model pro registrování událostí. ,)

Viz odkaz: http://www.quirksmode.org/js/events_advanced.html

Kód je pak třeba ošetřit podmínkou:



if (document.attachEvent) {
element.attachEvent("onclick", runMeOnEvent);
}
else if (document.addEventListener) {
element.addEventListener("click", runMeOnEvent, false);
}
else {
// případně ošetření pro jiné situace
}

Nahlásit jako SPAM
IP: 85.70.82.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Registrace — založil selkir

FB registrace — založil Kakaku

Registrace — založil Hierophant

Registrace služby — založil GeorgeW

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý