क्या जावास्क्रिप्ट घटना पर राइट क्लिक है?


173

क्या जावास्क्रिप्ट घटना पर राइट क्लिक है? यदि हां, तो मैं इसका उपयोग कैसे करूं?

जवाबों:


188

जैसा कि दूसरों ने उल्लेख किया है, सामान्य माउस घटनाओं (मूसडाउन, माउसअप, क्लिक) के माध्यम से सही माउस बटन का पता लगाया जा सकता है । हालाँकि, यदि आप राइट-क्लिक मेनू लाए जाने पर फायरिंग इवेंट की तलाश कर रहे हैं, तो आप गलत जगह देख रहे हैं। राइट-क्लिक / संदर्भ मेनू भी कीबोर्ड (विंडोज और कुछ लिनक्स पर शिफ्ट + एफ 10 या संदर्भ मेनू कुंजी) के माध्यम से सुलभ है। इस स्थिति में, आप जिस घटना को देख रहे हैं, वह है oncontextmenu:

window.oncontextmenu = function ()
{
    showCustomMenu();
    return false;     // cancel default menu
}

जैसे ही माउस ईवेंट्स के लिए, ब्राउज़र इवेंट ऑब्जेक्ट के लिए एक प्रॉपर्टी सेट करता है, जो ईवेंट हैंडलिंग फ़ंक्शन से एक्सेस होती है:

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!");
} 

window.oncontextmenu - MDC


5
जिस तरह / बटन के मुद्दे के साथ, सभी ब्राउज़र में 'oncontextmenu' को समान रूप से लागू नहीं किया गया है ... कुछ 'गोचैस' के लिए quirksmode.org/dom/events/contextmenu.html देखें ।
स्केनर

3
@ और हाय हाय एंडी, अभिव्यक्ति (isRightMB?"was not" : "")होनी चाहिए (isRightMB?"was" : "was not")। सही ? कृपया इसकी समीक्षा करने में मदद करें।
जो.ग्वान

1
@ जो: अजीब बात है कि 32 वोट कैसे गए और 4 साल बिना किसी को दिखाए;; मुझे लगता है कि मुझे माफ किया जा सकता है, हालांकि - यह 00:30 बजे था जब मैंने जवाब लिखा था!
एंडी ई

1
ध्यान रखें कि मैक FF पर ctrl + दायां क्लिक बाईं माउस क्लिक (e.which === 1) के माध्यम से आएगा , जबकि Mac Chrome पर ctrl + rightclick अपेक्षित दाएं माउस क्लिक के रूप में आएगा (e.ctrlKey && e) .which === 3)।
ND

8
Chrome 59 में, दाया-माउस-बटन ट्रिगर करता है onmousedownऔर onmouseup, लेकिन नहीं onclick। जाहिर है, क्रोम में, onclickकेवल बाएं-माउस-बटन के लिए ट्रिगर किया गया है। (और हाँ दोस्तों, मैंने कई बार यह परीक्षण किया) एक राइट-माउस-क्लिक का पता लगाने के लिए, आपको या तो गठबंधन करना होगा onmousedownऔर onmouseup, या उपयोग करना होगा oncontextmenu
वेनरिक्स

27

निम्नलिखित jQuery कोड पर एक नज़र है:

$("#myId").mousedown(function(ev){
      if(ev.which == 3)
      {
            alert("Right mouse button clicked on element with id myId");
      }
});

का मान whichहोगा:

  • बाएं बटन के लिए 1
  • मध्य बटन के लिए 2
  • 3 दाहिने बटन के लिए

2
Eeeew, यह भयानक है! जैसा .whichहै वैसा क्यों नहीं है .button? ऊ .button=> 0,1,2 ; which=> 1,2,3 । यह सिर्फ गलत है।
बेन फिलिप

11

आप घटना का उपयोग कर सकते हैं window.oncontextmenu, उदाहरण के लिए:

window.oncontextmenu = function () {
  alert('Right Click')
}
<h1>Please Right Click here!</h1>


यह भी छोड़ दिया आग छोड़ दिया
एलेक्स

विस्मयकारी +1, अब मैं संदर्भ मेनू कैसे अवरुद्ध करूं? @ user12345678
Shayan

2
@ शायन ई। कॉन्वेंटडिफ़ॉल्ट ()
ब्रायन एलन वेस्ट

@BrianAllanWest क्या वह jQuery है? मुझे नहीं पता कि इसका उपयोग कैसे करना है। window.oncontextmenu = function () { e.preventDefault() }काम नहीं किया।
शयन

2
@ शयन, नहीं, यह कच्ची जावास्क्रिप्ट है ... आप इसे इस तरह उपयोग करेंगे ... window.oncontextmenu = function (e) {e.preventDefault ();} यह ब्राउज़र के डिफ़ॉल्ट व्यवहार को रोकता है जब संदर्भ मेनू (यानी: दायाँ माउस क्लिक या मैक पर पकड़) दबाया जाता है।
ब्रायन एलन वेस्ट

6

हां, हालांकि w3c का कहना है कि क्लिक इवेंट से राइट क्लिक का पता लगाया जा सकता है, सामान्य ब्राउजर्स में राइट क्लिक के माध्यम से ऑनक्लिक को ट्रिगर नहीं किया जाता है।

वास्तव में, दायाँ क्लिक करें केवल ट्रिगर करें OnMouseDown onMouseUp और onContextMenu।

इस प्रकार, आप "onContextMenu" को राइट क्लिक ईवेंट मान सकते हैं। यह एक HTML5.0 मानक है।


1
हां, एक महान समाधान की तरह लगता है, खासकर यदि आप नए ब्राउज़रों को लक्षित कर रहे हैं। मुझे नहीं लगता कि यह केवल HTML5.0 है, क्योंकि IE 5.5 तत्वों पर भी इसका समर्थन करता है! यहां अधिक जानकारी है कि कौन से ब्राउज़र इसका समर्थन करते हैं: quirksmode.org/dom/events/contextmenu.html
इग्नास 2526

5

यदि आप सही माउस क्लिक का पता लगाना चाहते हैं, तो आपको MouseEvent.whichसंपत्ति का उपयोग नहीं करना चाहिए क्योंकि यह गैर-मानक है और ब्राउज़रों के बीच बड़ी असंगति है। ( एमडीएन देखें ) आपको इसके बजाय उपयोग करना चाहिए MouseEvent.button। यह दिए गए बटन को दर्शाने वाला नंबर देता है:

  • 0: मुख्य बटन दबाया जाता है, आमतौर पर बाएं बटन या अन-इनिशियल स्टेट
  • 1: सहायक बटन दबाया, आमतौर पर पहिया बटन या मध्य बटन (यदि वर्तमान में)
  • 2: द्वितीयक बटन दबाया, आमतौर पर सही बटन
  • 3: चौथा बटन, आमतौर पर ब्राउज़र बैक बटन
  • 4: पांचवां बटन, आमतौर पर ब्राउज़र फॉरवर्ड बटन

MouseEvent.button केवल मानक माउस की तुलना में अधिक इनपुट प्रकारों को संभालता है:

बटन को मानक "बाएं से दाएं" लेआउट में अलग तरीके से कॉन्फ़िगर किया जा सकता है। बाएं हाथ के उपयोग के लिए कॉन्फ़िगर किया गया एक माउस बटन क्रियाओं को उलट सकता है। कुछ इंगित करने वाले उपकरणों में केवल एक बटन होता है और मुख्य, द्वितीयक, सहायक आदि को इंगित करने के लिए कीबोर्ड या अन्य इनपुट तंत्र का उपयोग किया जाता है, अन्य में विभिन्न कार्यों और बटन मूल्यों के लिए मैप किए गए कई बटन हो सकते हैं।

संदर्भ:

  1. https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which
  2. https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button

काश यह पहला उत्तर था जिसे मैंने देखा था जब
खोजा था

3

नहीं, लेकिन आप यह पता लगा सकते हैं कि "ऑनमॉसडाउन" इवेंट में किस माउस बटन का उपयोग किया गया था ... और वहां से यह निर्धारित किया जाता है कि क्या यह "राइट-क्लिक" था।


@ ब्रायन: एक राइट क्लिक ट्रिगर होगा onmousedown, onmouseupऔर onclick। यदि आप राइट-क्लिक मेनू को ओवरराइड करते हुए देख रहे हैं, हालाँकि, ये ईवेंट्स वे नहीं हैं जिनका आपको उपयोग करना चाहिए (नीचे मेरा उत्तर देखें)।
एंडी ई

2

rightclickडिफ़ॉल्ट mousedownऔर mouseupघटनाओं के आधार पर एक कस्टम ईवेंट बनाने के लिए निम्न कोड jQuery का उपयोग कर रहा है । यह निम्नलिखित बातों पर विचार करता है:

  • माउसअप पर ट्रिगर
  • ट्रिगर केवल जब पहले एक ही तत्व पर मूसडाउन दबाया
  • यह कोड विशेष रूप से जेएफएक्स वेबव्यू में भी काम करता है (क्योंकि contextmenuघटना वहाँ शुरू नहीं होती है)
  • यह तब ट्रिगर नहीं करता है जब कीबोर्ड पर संदर्भमेन कुंजी दबाया जाता है (जैसे समाधान के साथ on('contextmenu', ...)करता है

$(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>


1

हाँ यही है!

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
}

अच्छी तरह से - तकनीकी रूप से इसकी "घटना" नहीं है, लेकिन इसका उपयोग किया जा सकता है।
चिकनमिलकोम्ब

@TimothyKhouri (और किसी और के यहाँ): यह एक सुसंगत घटना श्रोता समारोह है। आप फ़ंक्शन ऑब्जेक्ट को AddEventListener के दूसरे तर्क के रूप में पास करेंगे , जो तब निर्दिष्ट ईवेंट की घटना पर इसे कॉल करेगा । उदाहरण के लिए:elem.addEventListener("click", doSomething)
जॉन वीज़

1

हां, oncontextmenu शायद सबसे अच्छा विकल्प है, लेकिन इस बात से अवगत रहें कि यह माउस डाउन पर ट्रिगर करता है जबकि माउस पर क्लिक से ट्रिगर होगा।

अन्य संबंधित प्रश्न डबल राइट क्लिक के बारे में पूछ रहे थे - जो स्पष्ट रूप से मैनुअल टाइमर चेकिंग को छोड़कर समर्थित नहीं है। एक कारण यह है कि आप सही डबल क्लिक करने में सक्षम होना चाहते हैं, यदि आपको बाएं हाथ के माउस इनपुट (बटन रिवर्सल) का समर्थन करना है। ब्राउज़र कार्यान्वयन बहुत सी धारणाएँ बनाते हैं कि हमें उपलब्ध इनपुट उपकरणों का उपयोग कैसे करना चाहिए।


1

सही तरीके से किया गया सबसे आसान तरीका उपयोग कर रहा है

 $('classx').on('contextmenu', function (event) {

 });

हालांकि यह क्रॉस ब्राउज़र समाधान नहीं है, ब्राउज़र इस घटना के लिए अलग-अलग व्यवहार करते हैं विशेष रूप से फ़ायरफ़ॉक्स और आईई। मैं एक क्रॉस ब्राउज़र समाधान के लिए नीचे की सिफारिश करूंगा

$('classx').on('mousedown', function (event) {
    var keycode = ( event.keyCode ? event.keyCode : event.which );
    if (keycode === 3) {
       //your right click code goes here      
    }
});

1

यह आग लगाने का सबसे आसान तरीका है, और यह एप्लिकेशन ब्राउज़रों (CefSharp Chromium आदि ...) को छोड़कर सभी ब्राउज़रों पर काम करता है। मुझे उम्मीद है कि मेरा कोड आपकी और अच्छी किस्मत में मदद करेगा!

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>



0

यदि आप फ़ंक्शन को कॉल करना चाहते हैं जबकि राइट क्लिक इवेंट का मतलब है कि हम निम्नलिखित का उपयोग कर सकते हैं

 <html lang="en" oncontextmenu="func(); return false;">
 </html>

<script>
function func(){
alert("Yes");
}
</script>


0

whichऔर / या buttonसंपत्ति का उपयोग करने का प्रयास करें

डेमो

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);

कुछ जानकारी यहाँ


-1

jQueryपुस्तकालय का उपयोग कर घटना को संभालना

$(window).on("contextmenu", function(e)
{
   alert("Right click");
})

-1

माउस से राइट क्लिक को संभालने के लिए, आप 'oncontextmenu' इवेंट का उपयोग कर सकते हैं। नीचे एक उदाहरण है:

 document.body.oncontextmenu=function(event) {
     alert(" Right click! ");
 };

उपरोक्त कोड कुछ पाठ को सचेत करता है जब राइट क्लिक दबाया जाता है। यदि आप नहीं चाहते हैं कि ब्राउज़र का डिफ़ॉल्ट मेनू दिखाई दे, तो आप रिटर्न गलत जोड़ सकते हैं; फ़ंक्शन की सामग्री के अंत में। धन्यवाद।


केवल कुछ ढांचे को बढ़ावा देने वाले उत्तर के साथ जवाब देने के बजाय, आपका जवाब अधिक उपयोगी होगा यदि इसमें एक वेनिला जेएस समाधान शामिल है, और फिर शायद इस पर विस्तृत रूप से वर्णन करें कि आपके ढांचे का उपयोग करना कितना आसान हो सकता है।
ज़निफ

ठीक है ... सिफारिश के लिए धन्यवाद .. इसका वास्तव में वानीला js के साथ बहुत आसान है
Sayanjyoti दास

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.