2010-11-20 27 views
160

Standart içerik menülerini engellemek ve sağ tıklama olayını elle tutmak istiyorum.JavaScript'te sağ tıklama etkinliğini nasıl yakalarım?

Bu nasıl yapılır? Üzerinde küresel kullanmak istiyorsanız()

function rightclick() { 
    var rightclick; 
    var e = window.event; 
    if (e.which) rightclick = (e.which == 3); 
    else if (e.button) rightclick = (e.button == 2); 
    alert(rightclick); // true or false, you can trap right click here by if comparison 
} 

(http://www.quirksmode.org/js/events_properties.html)

Ve sonra bile fonksiyon rightclick (ile onMouseDown kullanın:

+8

@systempuntoout Hayır, bu farklı bir sorudur. Diğer soru, "javascript kullanmadan sağ tıklamayı engellemek" istiyor, bu soru sadece işlevsellikle genişletmek istiyor (pek çok site, kullanıcıları rahatsız edici bir şekilde rahatsız etmeden yapıyor, ör. Google dokümanları) – bobobobo

+2

@Bobobobo: Doğru. UI uzantısını hedefliyorum, kısıtlama değil. – Giffyguy

+0

ctrl + tıklayın veya cmd + click bunun için geçerli senaryolardır. Sağ tıklamaya sıkı sıkıya bağlı olsa da, içerik menüsünün sağ tıklatılmadığı için bu tam bir kopya gibi görünmemektedir. Sağ tıklama, bağlam menüsünde yer alır, başka bir şekilde değil. –

cevap

234

kullanın oncontextmenu olayı yapabilirsiniz. Burada

bir e var xample:

<div oncontextmenu="javascript:alert('success!');return false;"> 
    Lorem Ipsum 
</div> 

Ve kullanarak olay dinleyicileri:

el.addEventListener('contextmenu', function(ev) { 
    ev.preventDefault(); 
    alert('success!'); 
    return false; 
}, false); 

aksi standart bağlam menüsü hala açılır, return false unutmayın.

javascript:alert("Success!") yerine yazdığınız bir işlevi kullanacaksanız, BOTH işlevini ve oncontextmenu özniteliğini yanlış olarak döndürmeyi unutmayın.

+52

: 'elt.addEventListener (' contextmenu ', işlev (ev) {ev.preventDefault(); alert (' başarı! '); False;}, false); – rampion

+0

Mükemmel kod +1, daha ince bir yol da buldum. 'oncontextmenu = "chatMenu (olay)" sonra sadece e.preventDefault (e) chatMenu içinde geçen, kullanılacak:; yanlış geri D Bu şekilde; Her yeni öğe için geçilmeye gerek yoktur (sohbet günlüğü veya niçin söylenir) –

+5

Bu sadece sağ tıklamayı kaldıracaktır. Her türlü tıklama için bir olay işleyicisi istiyorsanız, aşağıdaki kodla birlikte aşağıdakileri kullanın: "var onMousedown = function (e) { (e.which === 1) {/ * Left Mouse * /} başka bir şekilde (e.which === 3) {/ * Sağ Fare * /} /*etc.*/ }; clickArea.addEventListener ("mousedown", onMousedown); Contextmenu dinleyicisi, sağ tıklama etkinliğinin içinden geçmesine izin verecek. Mac FF * ctrl + rightclick * uygulamasının sol fare tıklamasıyla gerçekleşeceğini, ancak Mac Chrome'da * ctrl + rightclick * 'in sağ fare tıklamasıyla karşılaşacağını unutmayın. –

21

Ben böyle bir şey arıyor düşünüyorum bütün bu sayfa bu <body onmousedown=rightclick(); >

+1

'u kullanmanızı öneririm. Eğer ((e.which && e.which == 3) || (e.button && e.button == 2)) 'anlamına gelir. – Shea

+4

veya sadece (e.which === 3 || e.button === 2) – ansiart

+0

eski okul, ama neredeyse her yerde çalışıyor. Olay dinleyicilerini kullanarak – nekavally

İlgili konular