मध्यम क्लिक का उपयोग करते हुए ऑनक्लिक घटना को ट्रिगर करना


90

मैं एक पॉप अप के रूप में onclickखोलने के लिए एक हैशेड लिंक की घटना का उपयोग कर रहा हूं <div>। लेकिन मध्य क्लिक से onclickईवेंट ट्रिगर नहीं होता है, बल्कि केवल hrefलिंक की विशेषता मान लेता है और एक नए पृष्ठ में URL लोड करता है। <div>पॉपअप के रूप में खोलने के लिए मैं मध्य क्लिक का उपयोग कैसे कर सकता हूं ?


15
मुझे अभी भी समझ में नहीं आया कि समस्या का समाधान कैसे किया गया, जब मध्य क्लिक ऑनक्लिक ईवेंट को ट्रिगर नहीं करता है।
टॉम ज़ातो -

3
@ TomášZato ब्राउज़र्स 'क्लिक' ईवेंट को मध्य-क्लिक के साथ फायर नहीं करते हैं, लेकिन वे 'माउसअप' ईवेंट को आग लगा सकते हैं। फिर जावास्क्रिप्ट ढांचा आपको भ्रमित करने के लिए 'क्लिक' कार्रवाई के लिए बाध्य कर सकता है। मैं unixpapa.com/js/mouse.html
rds

जवाबों:


64

संपादित करें

यह उत्तर हटा दिया गया है और क्रोम पर काम नहीं करता है । आप शायद ऑक्सलिंक ईवेंट का उपयोग करके सबसे अंत में होंगे , लेकिन कृपया नीचे दिए गए अन्य उत्तरों को देखें।

/ संपादित करें


भिखारियों का उत्तर सही है, लेकिन ऐसा लगता है कि आप मध्य क्लिक की डिफ़ॉल्ट कार्रवाई को रोकना चाहते हैं। किस मामले में, निम्नलिखित शामिल करें

$("#foo").on('click', function(e) {
   if (e.which == 2) {
      e.preventDefault();
      alert("middle button"); 
   }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a id="foo" href="http://example.com">middle click me</a>

stopDefault () ईवेंट की डिफ़ॉल्ट कार्रवाई को रोक देगा।


19
ध्यान रखें कि .liveहटा दिया गया था और पक्ष में हटा दिया गया.on
Naftali उर्फ ​​नील

2
मेरे लिए एफएफ केवल मूसडाउन इवेंट के साथ काम करता है। क्लिक इवेंट ईवेंट कॉल इस चीज़ को scr.hu/1kig/su5c9
l00k

1
क्या इसके लिए कोई क्रॉस-ब्राउज़र स्थिर है 2?
fracz

11
यह अब क्रोम 55 में काम नहीं करता है। 1 , 2 देखें और यह प्रश्न
बिल्‍कुल।

1
यह कैसे एक समाधान है जब समस्या यह थी कि मध्य क्लिक से शुरू होने के लिए क्लिक इवेंट को ट्रिगर नहीं किया जाता है?
द्राजेन बेज़ेलोवुक

32

मध्य-क्लिक / माउस-व्हील बटन का पता लगाने के लिए, आपको ईवेंट का उपयोग करना होगा auxclick। उदाहरण के लिए:

<a href="https://example.com" onauxclick="func()" id="myLink"></a>

फिर अपनी स्क्रिप्ट फ़ाइल में

function func(e) {
  if (e.button == 1) {
    alert("middle button clicked")
  }
}

यदि आप इसे जावास्क्रिप्ट (HTML विशेषता का उपयोग किए बिना onauxclick) से करना चाहते हैं , तो आप addEventListenerतत्व के लिए:

let myLink = document.getElementById('myLink')
myLink.addEventListener('auxclick', function(e) {
  if (e.button == 1) {
    alert("middle button clicked")
  }
})
<a id="myLink" href="http://example.com">middle click me</a>

यहाँauxclick घटना के बारे में mdn पेज चेकआउट करें


नोट: onauxclick काम करेगा लेकिन यह एक नए टैब में लिंक को नहीं खोलता है ...
जोनाथन लालबिर्ते

2
यह एकमात्र उत्तर है जो वास्तव में क्रोम में काम करता है। यदि आपको दाएं माउस बटन के लिए "क्लिक" ईवेंट की आवश्यकता है, तो आप "रेफ़रमेनू" का उपयोग कर सकते हैं (हालाँकि यह न केवल राइट क्लिक से निकाल दिया जाता है): developer.mozilla.org/en-US/docs/Web/API/Element/…
हम्पारितारी

1
उपरोक्त उत्तर के साथ संयोजन, आप if(event.button==1)क्लॉज़ द्वारा राइट क्लिक कैप्चर को रोक सकते हैं , यह एकमात्र काम करने वाला उत्तर है।
बडी

ध्यान दें कि आपको दोनों auxclickईवेंट का उपयोग करने की आवश्यकता है , और मूल्य के लिए जांच करने के लिए e.button == 1। मैंने उत्तर संपादित किया।
फ्लिअम

26

आप उपयोग कर सकते हैं

event.button

माउस बटन पर क्लिक करने के लिए पहचानें।

उस पूर्णांक मान को लौटाता है जो बटन को दर्शाता है जो राज्य को बदल देता है।

  • मानक 'क्लिक' के लिए, आमतौर पर बाएं बटन
  • मध्य बटन के लिए 1, आमतौर पर व्हील-क्लिक
  • 2 राइट बटन के लिए, आमतौर पर राइट-क्लिक करें

ध्यान दें कि इंटरनेट एक्सप्लोरर में इस सम्मेलन का पालन नहीं किया जाता है: विवरण के लिए QuirksMode देखें।

बटन का क्रम अलग-अलग हो सकता है यह इस बात पर निर्भर करता है कि पॉइंटिंग डिवाइस को कैसे कॉन्फ़िगर किया गया है।

यह भी पढ़ें

किस माउस बटन पर क्लिक किया गया है?

यह पता लगाने के लिए दो गुण हैं कि किस माउस बटन पर क्लिक किया गया है: कौन सा और बटन। कृपया ध्यान दें कि ये गुण हमेशा एक क्लिक ईवेंट पर काम नहीं करते हैं। माउस बटन को सुरक्षित रूप से पता लगाने के लिए आपको मूसडाउन या माउसअप घटनाओं का उपयोग करना होगा।

document.getElementById('foo').addEventListener('click', function(e) {
  console.log(e.button);
  e.preventDefault();
});
<a id="foo" href="http://example.com">middle click me</a>


4
मैं event.whichइसका उपयोग करने की सलाह दूंगा क्योंकि इसे jQuery के स्रोत में सभी ब्राउज़रों में मानकीकृत किया गया है - लाइन 2756 -if ( !event.which && event.button ) event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
Russ Cam

2
@RussCam हालांकि, MouseEvent.whichकिसी भी कल्पना में परिभाषित नहीं है, लेकिन MouseEvent.buttonDOM L2 ईवेंट में परिभाषित किया गया है।
ओरोल

@ ऑरिओल सही है, लेकिन विभिन्न ब्राउज़र विक्रेताओं में अलग तरह से लागू किया गया है। ओपी ने सवाल को jQuery के साथ टैग किया, इसीलिए मैंने इसका उपयोग करने का सुझाव दिया था event.whichलेकिन यह विस्तृत होना चाहिए MouseEvent.whichथा जो आधिकारिक विनिर्देश का हिस्सा नहीं है।
रस कैम

@ वरुण, 7 से अधिक बटन वाले गेमिंग पति के बारे में क्या? egg-tech.com/blog/images/mouse%20buttons.jpg
पेसियर

वास्तव में, यह फ़ायरफ़ॉक्स या क्रोम जैसे ब्राउज़रों में काम नहीं करता है, केवल प्राथमिक क्लिक के लिए। देखें 1 , 2 और इस सवाल का
फ्लिम्ड

8

मैं आमतौर पर नफरत करता हूं जब लोग समाधान के बजाय विकल्प प्रदान करते हैं, लेकिन चूंकि समाधान पहले ही प्रदान किए जा चुके हैं इसलिए मैं अपने नियम को तोड़ने जा रहा हूं।

मध्य-क्लिक की सुविधा वाली वेबसाइटें जहां ओवरराइड होती हैं, वे वास्तव में मुझे बहुत प्रभावित करती हैं। मैं आमतौर पर मध्य-क्लिक कर रहा हूं क्योंकि मैं वर्तमान सामग्री का अबाधित दृश्य रखते हुए नई सामग्री को एक नए टैब में खोलना चाहता हूं। किसी भी समय आप मध्य-क्लिक कार्यक्षमता को अकेले छोड़ सकते हैं और प्रासंगिक सामग्री को अपने क्लिक किए गए तत्व के HREF विशेषता के माध्यम से उपलब्ध करा सकते हैं, मेरा दृढ़ता से मानना ​​है कि आपको क्या करना चाहिए।


लेकिन क्या होगा अगर आप अपने वेबपेज पर टैब रखते हैं और अपने ब्राउज़र में वैसा ही व्यवहार चाहते हैं? midclick को एक मौजूदा टैब बंद करना चाहिए।
15

6

jQuery प्रदान करता है .which उस घटना पर विशेषता है जो क्लिक बटन आईडी को बाएं से दाएं 1, 2, 3 के रूप में देता है। इस मामले में आप 2 चाहते हैं।

उपयोग:

$("#foo").live('click', function(e) { 
   if( e.which == 2 ) {
      alert("middle button"); 
   }
}); 

एडमांटियम का जवाब भी काम करेगा लेकिन आपको IE के लिए बाहर देखने की जरूरत है क्योंकि वह नोट करता है:

$("#foo").live('click', function(e) { 
   if((!$.browser.msie && e.button == 1) || ($.browser.msie && e.button == 2)) { 
     alert("middle button"); 
   } 
});

यह भी याद रखें कि .buttonविशेषता 0-अनुक्रमित है जैसे 1-अनुक्रमित नहीं है .which


क्या मैं मोज़िला ब्राउज़र की कार्यक्षमता को ओवरराइड कर सकता हूँ !! उदाहरण के लिए बाईं ओर यह एक पॉप अप खोलता है .... लेकिन मध्य क्लिक के लिए यह एक पॉप अप नहीं खोल रहा है और एक नया टैब खोला गया है जिसमें पॉप अप नहीं खुल रहा है .. इसलिए मैं एक मध्य क्लिक कार्यक्षमता को ओवरराइड करना चाहता हूं मोज़िला ....
सदेश कुमार एन

मोज़िला में एक नए विंडो के बजाय सभी पॉपअप खोलने के लिए एक सेटिंग है। यदि उपयोगकर्ता के पास यह विकल्प सक्षम है तो मुझे नहीं लगता कि ऐसा कुछ भी है जो आप कर सकते हैं। अगर यह नहीं हो रहा है तो क्या आप कुछ कोड या समस्या पृष्ठ का लिंक पोस्ट कर सकते हैं?
भिखारी

यह फ़ायरफ़ॉक्स और क्रोम जैसे ब्राउज़रों में काम नहीं करता है।
फ्लिअम

6

यह सवाल थोड़ा पुराना है, लेकिन मुझे एक समाधान मिला:

$(window).on('mousedown', function(e) {
   if( e.which == 2 ) {
      e.preventDefault();
   }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="http://example.com">middle click me</a>

माउस व्हील के लिए क्रोम "फायर" इवेंट नहीं है

एफएफ और क्रोम में काम करते हैं


मैं आपके उपयोग के मामले को स्वीकार नहीं करना चाहता, लेकिन मैं बहुत से लोगों को पैसे के बदले में वास्तव में 'माउसअप' की आवश्यकता होगी। यह मध्य माउस बटन के साथ भी काम करता है।
बोजिदर स्टेंचव

जब मैं फ़ायरफ़ॉक्स और क्रोम में यह कोशिश करता हूं, तो यह नए टैब में लिंक को खोलने के डिफ़ॉल्ट व्यवहार को नहीं रोकता है, भले ही e.preventDefault()इसे कहा जाता है।
फ्लिम

5

उचित विधि का उपयोग करना है .on, जैसा .liveकि हटा दिया गया है और फिर jQuery से हटा दिया गया है:

$("#foo").on('click', function(e) { 
   if( e.which == 2 ) {
      e.preventDefault();
      alert("middle button"); 
   }
});

या यदि आप "लाइव" महसूस करना चाहते हैं और #fooदस्तावेज़ शुरू होने पर आपके पृष्ठ पर नहीं हैं:

$(document).on('click', '#foo', function(e) { 
   if( e.which == 2 ) {
      e.preventDefault();
      alert("middle button"); 
   }
});

मूल उत्तर


इवेंट clickफ़ायरफ़ॉक्स और क्रोम जैसे ब्राउज़रों में मध्य माउस बटन के लिए काम नहीं करता है।
फ्लिम


हाँ। स्टैक ओवरफ्लो में आउट-ऑफ-डेट उत्तरों के लिए एक अच्छा समाधान नहीं है। मुझे डर है कि मुझे नीचा दिखाना होगा क्योंकि "यह उत्तर उपयोगी नहीं है" किसी भी अधिक। इससे भी बुरी बात यह है कि पिन किए गए उत्तर में सैकड़ों या हजारों डाउनवोट हो सकते हैं क्योंकि यह आउट-ऑफ-डेट है, और ओपी जवाब नहीं दे रहा है तो भी यह हमेशा के लिए पिन किया जाएगा।
फ्लिम्म

एक नया प्रश्न पूछें :-) (यह कहते हुए कि यह पुराना है और आप 2020 उत्तर चाहते हैं)। लेकिन यह भी मूसडाउन / माउसअप घटनाओं का उपयोग कर सकते हैं?
Naftali उर्फ ​​नील

यहां तक ​​कि अगर मैं ऐसा करता हूं, तो मेरे जैसे लोग अभी भी खोज इंजन से आने पर इस जवाब में आने वाले हैं, और पिन किए गए गलत जवाब से भ्रमित होने वाले हैं।
फ्लिम्म

3

मुझे पता है कि मुझे पार्टी के लिए देर हो रही है, लेकिन उन लोगों के लिए जो अभी भी मध्य क्लिक को संभालने में समस्या रखते हैं, यदि आप घटना को देखते हैं तो जांच लें। प्रतिनिधिमंडल के मामले में, clickघटना आग नहीं है। की तुलना करें:

यह मध्य क्लिक के लिए काम करता है:

$('a').on('click', function(){
  console.log('middle click');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="http://example.com">middle click me</a>

यह मध्य क्लिक के लिए काम नहीं करता है:

$('div').on('click', 'a', function(){
  alert('middle click');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <a href="http://example.com">middle click here</a>
</div>

यदि आपको अभी भी इवेंट डेलिगेशन का उपयोग करके मध्य क्लिक को ट्रैक करने की आवश्यकता है , तो इसी jQuery टिकट में वर्णित एकमात्र तरीका , उपयोग mousedownया mouseupइसके बजाय है। इस तरह:

यह प्रतिनिधि मध्य क्लिकों के लिए काम करता है:

$('div').on('mouseup', 'a', function(){
  console.log('middle click');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <a href="http://example.com">middle click me</a>
</div>

इसे यहाँ ऑनलाइन देखें


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