Yanıtlar:
Diğerlerinin de belirttiği gibi, sağ fare düğmesi olağan fare olayları (fareyle üzerine gelme, fare ile tıklama, tıklama) ile tespit edilebilir . Ancak, sağ tıklama menüsü açıldığında bir tetikleme etkinliği arıyorsanız, yanlış yere bakıyorsunuz. Sağ tıklama / içerik menüsüne klavyeden de erişilebilir (shift + F10 veya Windows ve bazı Linux'ta içerik menüsü tuşu). Bu durumda, aradığınız olay oncontextmenu:
window.oncontextmenu = function ()
{
showCustomMenu();
return false; // cancel default menu
}
Fare olaylarının kendilerine gelince, tarayıcılar olay nesnesine olay işleme işlevinden erişilebilen bir özellik ayarlar:
document.body.onclick = function (e) {
var isRightMB;
e = e || window.event;
if ("which" in e) // Gecko (Firefox), WebKit (Safari/Chrome) & Opera
isRightMB = e.which == 3;
else if ("button" in e) // IE, Opera
isRightMB = e.button == 2;
alert("Right mouse button " + (isRightMB ? "" : " was not") + "clicked!");
}
(isRightMB?"was not" : "")olmalı (isRightMB?"was" : "was not"). Sağ ? Lütfen gözden geçirmeye yardımcı olun.
onmousedownve onmouseupancak onclick. Görünüşe göre, Chrome'da onclickyalnızca sol fare düğmesi için tetikleniyor. sağ fare tıklama algılamak için (ve çocuklar evet, bu birden çok kez test edilmiş), birleştirmek ya zorunda onmousedownve onmouseup, veya kullanım oncontextmenu.
aşağıdaki jQuery koduna bir göz atın:
$("#myId").mousedown(function(ev){
if(ev.which == 3)
{
alert("Right mouse button clicked on element with id myId");
}
});
Değeri which:
.whichdeğil .button? Oo .button=> 0,1,2 ; which=> 1,2,3 . bu sadece yanlış.
Etkinliği kullanabilirsiniz, window.oncontextmenuörneğin:
window.oncontextmenu = function () {
alert('Right Click')
}
<h1>Please Right Click here!</h1>
window.oncontextmenu = function () { e.preventDefault() }işe yaramadı.
W3c, sağ tıklamanın tıklama olayı tarafından algılanabileceğini söylüyor olsa da, onClick normal tarayıcılarda sağ tıklama ile tetiklenmez.
Aslında, sağ tıklama sadece onMouseDown onMouseUp ve onContextMenu tetiklenir.
Bu nedenle, "onContextMenu" öğesini sağ tıklama olayı olarak kabul edebilirsiniz. Bu bir HTML5.0 standardıdır.
Sağ fare tıklamasını algılamak istiyorsanız, MouseEvent.whichözelliği standart olmadığı ve tarayıcılar arasında büyük uyumsuzluk olduğu için kullanmamalısınız. (bkz. MDN ) Bunun yerine kullanmalısınız MouseEvent.button. Belirli bir düğmeyi temsil eden bir sayı döndürür:
0: Ana düğme basıldı, genellikle sol düğme veya başlatılmamış durum1: Yardımcı düğmeye basıldı, genellikle tekerlek düğmesi veya orta düğme (varsa)2: İkincil düğmeye basıldı, genellikle sağ düğme3: Dördüncü düğme, genellikle Tarayıcı Geri düğmesi4: Beşinci düğme, genellikle Tarayıcı İlet düğmesiMouseEvent.button standart fareden daha fazla girdi türü kullanır:
Düğmeler standart "soldan sağa" düzeninden farklı bir şekilde yapılandırılabilir. Sol elle kullanım için yapılandırılan bir farede düğme eylemleri tersine çevrilmiş olabilir. Bazı işaret aygıtlarında yalnızca bir düğme bulunur ve ana, ikincil, yardımcı vb. Belirtmek için klavye veya diğer giriş mekanizmaları kullanılır. Diğerlerinde farklı işlevlere ve düğme değerlerine eşlenmiş birçok düğme bulunabilir.
Referans:
Hayır, ancak "onmousedown" etkinliğinde hangi fare düğmesinin kullanıldığını algılayabilir ve oradan "sağ tık" olup olmadığını belirleyebilirsiniz.
onmousedown, onmouseupve onclick. Bununla birlikte, sağ tıklama menüsünü geçersiz kılmaya çalışıyorsanız, bu etkinlikler kullanmanız gerekenler değildir (aşağıdaki cevabıma bakın).
Aşağıdaki kod, rightclickvarsayılan mousedownve mouseupolaylara dayalı özel bir olay oluşturmak için jQuery kullanır . Aşağıdaki hususları dikkate alır:
contextmenuolay orada tetiklenmediğinden)on('contextmenu', ...)yapar$(function ()
{ // global rightclick handler - trigger custom event "rightclick"
var mouseDownElements = [];
$(document).on('mousedown', '*', function(event)
{
if (event.which == 3)
{
mouseDownElements.push(this);
}
});
$(document).on('mouseup', '*', function(event)
{
if (event.which == 3 && mouseDownElements.indexOf(this) >= 0)
{
$(this).trigger('rightclick');
}
});
$(document).on('mouseup', function()
{
mouseDownElements.length = 0;
});
// disable contextmenu
$(document).on('contextmenu', function(event)
{
event.preventDefault();
});
});
// Usage:
$('#testButton').on('rightclick', function(event)
{
alert('this was a rightclick');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="testButton">Rightclick me</button>
Evet öyle!
function doSomething(e) {
var rightclick;
if (!e) var e = window.event;
if (e.which) rightclick = (e.which == 3);
else if (e.button) rightclick = (e.button == 2);
alert('Rightclick: ' + rightclick); // true or false
}
elem.addEventListener("click", doSomething)
Evet, oncontextmenu muhtemelen en iyi alternatiftir, ancak farenin aşağısında tetiklendiğini, ancak farenin tıklanmasında tetikleneceğini unutmayın.
İlgili diğer sorular, manuel zamanlayıcı kontrolü dışında görünüşte desteklenmeyen çift sağ tıklama hakkında sorular soruyordu. Sağ çift tıklamaya sahip olmanızın bir nedeni, sol fare girişini (düğme tersine çevirme) gerekli / desteklemenizdir. Tarayıcı uygulamaları, mevcut giriş cihazlarını nasıl kullanmamız gerektiği konusunda birçok varsayım yapıyor gibi görünüyor.
Sağ tıklamayı yapmanın en kolay yolu kullanmaktır
$('classx').on('contextmenu', function (event) {
});
Ancak bu çapraz tarayıcı çözümü değildir, tarayıcılar bu olay için özellikle firefox ve IE gibi farklı davranır. Çapraz tarayıcı çözümü için aşağıda tavsiye ederim
$('classx').on('mousedown', function (event) {
var keycode = ( event.keyCode ? event.keyCode : event.which );
if (keycode === 3) {
//your right click code goes here
}
});
Ateş etmenin en kolay yolu budur ve (CefSharp Chromium vb ...) gibi uygulama web görünümleri hariç tüm tarayıcılarda çalışır. Umarım kodum size yardımcı olur ve iyi şanslar!
const contentToRightClick=document.querySelector("div#contentToRightClick");
//const contentToRightClick=window; //If you want to add it into the whole document
contentToRightClick.oncontextmenu=function(e){
e=(e||window.event);
e.preventDefault();
console.log(e);
return false; //Remove it if you want to keep the default contextmenu
}
div#contentToRightClick{
background-color: #eee;
border: 1px solid rgba(0,0,0,.2);
overflow: hidden;
padding: 20px;
height: 150px;
}
<div id="contentToRightClick">Right click on the box !</div>
window.oncontextmenu = function (e) {
e.preventDefault()
alert('Right Click')
}
<h1>Please Right Click here!</h1>
Sağ tıklama olayı sırasında işlevi çağırmak istiyorsanız, aşağıdakileri kullanabiliriz
<html lang="en" oncontextmenu="func(); return false;">
</html>
<script>
function func(){
alert("Yes");
}
</script>
whichVe / veya buttonmülkü kullanmayı deneyin
function onClick(e) {
if (e.which === 1 || e.button === 0) {
console.log('Left mouse button at ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 2 || e.button === 1) {
console.log('Middle mouse button ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 3 || e.button === 2) {
console.log('Right mouse button ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 4 || e.button === 3) {
console.log('Backward mouse button ' + e.clientX + 'x' + e.clientY);
}
if (e.which === 5 || e.button === 4) {
console.log('Forward mouse button ' + e.clientX + 'x' + e.clientY);
}
}
window.addEventListener("mousedown", onClick);
Burada bazı bilgiler

Fareden sağ tıklamayı işlemek için 'oncontextmenu' olayını kullanabilirsiniz. Aşağıda bir örnek verilmiştir:
document.body.oncontextmenu=function(event) {
alert(" Right click! ");
};
yukarıdaki kod, sağ tıklandığında bazı metinleri uyarır. Tarayıcının varsayılan menüsünün görünmesini istemiyorsanız return false ekleyebilirsiniz; Fonksiyon içeriğinin sonunda. Teşekkürler.
Evet, bir javascript mousedown etkinliği. Bir jQuery eklentisi var yapmak için de var