ugrás a tartalomhoz

Jobb kattintás eventje

TIV · 2012. Jún. 26. (K), 16.57
Sziasztok!

Kérnék egy kis segítséget a JS proktól! :) Van egy elemem (div), aminél ha bal egérgombbal kattintunk, akkor rádobom egy lapra, ha jobb klikkel, akkor pedig lecserélek egy képet egy másikra. Képtelen vagyok megoldani, Chrome-ot használok. A gond az, hogy a preventDefault ellenére megjelenik a context menü, aminek nem kellene:

  $('.partner-head').live('mousedown', function(e) {
    if(e.which == 3) {
      e.preventDefault();
      // itt van a kép csere...
    } else {
      window.location.href='mindegyhova';
    }
  });
Előre is köszönöm a segítséget!
 
1

a context menüt a

Karvaly84 · 2012. Jún. 26. (K), 19.08
a context menüt a "oncontextmenu" eseménnyel kezelheted. egyébként meg figyelheted az egér gombot is de az macerás az IE miatt. kell böngészőt detektálni, és egy key map kell plussz egy burkoló objektum az eventhez. a jQuery forráskódjában láttam így.

ui.: ja most nézem, hogy jQuery-t használsz :D
3

köszi, de....

TIV · 2012. Jún. 27. (Sze), 09.11
ilyen metódus már nincs:
Uncaught TypeError: Object [object Object] has no method 'oncontextmenu'
6

Nem tudom, hogy próbáltad, de

Karvaly84 · 2012. Jún. 27. (Sze), 09.33
Nem tudom, hogy próbáltad, de nekem megy rendesen:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>contextmenu</title>
</head>
<body>
<script type="text/javascript">

document.addEventListener("contextmenu", function(e) {
	e.preventDefault();
}, false)

</script>
</body>
</html>
2

Az lemaradt, hogy a menü

Karvaly84 · 2012. Jún. 26. (K), 19.25
Az lemaradt, hogy a menü megjelenését az okozza, hogy te a gomb lenyomását figyeled a felengedés helyett. A contextmenu-t a onmouseup esemény váltja ki akkor ha a jobb egérgombbal kattint a delikvens.
4

áhá!

TIV · 2012. Jún. 27. (Sze), 09.14
Ja, értem. Akkor most előjött egy korábbi problémám:

  $('.partner-head').bind('mouseup', function(e) {
    console.log('mouse up');
  });

// vagy

  $('.partner-head').mouseup(function(e) {    
    console.log('mouse up);
  });
Ezek azt csinálják, hogy 2x, de néha 3x is lefutnak egy kattintásnál és nem értem miért. Külön külön próbáltam őket, nincs más esemény figyelés a diven, csak ez.... nem értem miért érzi több kattintásnak...

van ötleted? kösziiiiii
5

Azért mert a boruló elemeken

Karvaly84 · 2012. Jún. 27. (Sze), 09.27
Azért mert a boruló elemeken is lefut az esemény. Annyiszor fut le ahány elemet egymásba pakoltál. Ez az úgynevezett "bubbling" effektus. e.stopPropagation() segít.
8

hihetetlen

TIV · 2012. Jún. 27. (Sze), 10.03
Hát köszönöm a segítséged, nem fogod elhinni mi történt. Szar az egerem. Nem értem, hogy lehet ez, de többször kiváltja az eventet egy kattintásnál. Azért fura, mert a Windowsban amúgy normálisan működik. Tegnap is 2 órát debuggoltam rajta, ma is 2 órát, pedig egyszer már sikerült megcsinálnom egy másik weblapon a jobbklikkes cuccot. Átültem egy másik géphez és ott működött ugyanaz a kód. Visszaültem és touchpaddal kattintottam jobbklikket és jó volt, egy kattintást egynek vett. A szar olcsó egér viszont rosszul kezel valamit és többször is megfuttatja az eventet. Nem értem, de ez van... :O Egércsere!
11

lehet jo lenne egy időzítőt

Karvaly84 · 2012. Jún. 27. (Sze), 10.34
lehet jo lenne egy időzítőt is alkalmaznod, pl, lehet sok embernek van tescos egere gondolj bele :D sztem pár 10ed másodperces intervallum még sok is lehet.
13

van benne valami

TIV · 2012. Jún. 28. (Cs), 15.25
Mondasz valamit... annyira nem vagyok benne a JS világában (bár ez kiderült már), ehhez az időzítőhöz van valami linked, ami alapján el tudok indulni?
14

window.setTimeout() de most

Karvaly84 · 2012. Jún. 28. (Cs), 17.23
window.setTimeout()

de most belegondolva nem tudom jo lessz e, eléggé macera ilyen alapon minden klikk eseményre lehetne alkalmazni már hülyeségnek tartom :D
7

Egyébként, most kicsit

Karvaly84 · 2012. Jún. 27. (Sze), 09.59
Egyébként, most kicsit teszteltem Firefox alatt: Az oncontextmenu esemény elöbb bekövetkezik mint a onmouseup esemény.

Azt tudod csinálni, hogy figyeled mind a két eseményt:

onmouseup eseménynél figyeled melyik gombbal kattintottak, és ha a bal gombbal csinálod amit kell különben nem csinálsz semmit.

oncontextmenu eseménynél tudjuk, hogy a jobb gombbal kattintottak és csinálod amit kell, majd löksz egy preventDefault()-ot, miután lefutott az eseménykezelő ki fog váltódni az onmouseup esemény is de mivel jobb gombbal lett kattintva nem csinálsz semmit. Így működni fog. A buborékokra meg figyelj.


----- VAGY -----

document-re tolsz egy contextmenu figyelést, és ha az esemény kiváltás helye egybe esik a kérdéses div-el nyomsz egy preventDefault-ot, ekkor már a mouseup eseményben kezelheted mind két gombot.
9

megoldás

TIV · 2012. Jún. 27. (Sze), 10.05
Visszatértem az eredeti kódomhoz, mert kiderült, hogy az is működik, csak fos az egér, jó firefoxon is...

  $(".partner-head").live("contextmenu",function(e) {
    if(e.which == 3) {
      e.preventDefault();
    }
  });
12

jó firefoxon isHa a Firefox

kuka · 2012. Jún. 27. (Sze), 11.00
jó firefoxon is
Ha a Firefox gazdája is úgy akarja. Nálam például dom.event.contextmenu.enabled értéke false, ezért a context menü megjelenése nem akadályozható meg. Csak úgy megemlítettem.
10

köszi

TIV · 2012. Jún. 27. (Sze), 10.06
Köszi a segítséget, ma is tanultam valamit!