মিডল ক্লিক ব্যবহার করে ট্র্যাকিং অনক্লিক ইভেন্ট


90

আমি একটি পপ আপ হিসাবে onclickখোলার জন্য হ্যাশ লিঙ্কের ইভেন্টটি ব্যবহার করছি <div>। তবে মিডল ক্লিক onclickইভেন্টটি ট্রিগার করে না তবে কেবল hrefলিঙ্কটির বৈশিষ্ট্যযুক্ত মান নেয় এবং একটি নতুন পৃষ্ঠায় ইউআরএল লোড করে। <div>পপআপ হিসাবে খুলতে আমি মিডল ক্লিকটি কীভাবে ব্যবহার করতে পারি ?


15
মিডল ক্লিক অনক্লিক ইভেন্টটি ট্রিগার না করে যখন সমস্যাটি কীভাবে সমাধান করা হয়েছিল আমি এখনও বুঝতে পারি না।
টোমা জ্যাটো - মনিকা

4
@ টম্যাজাটো ব্রাউজারগুলি একটি 'ক্লিক' ইভেন্টটিকে মাঝারি ক্লিকের সাথে আগুন দেয় না, তবে তারা 'মাউসআপ' ইভেন্টটিকে বরখাস্ত করতে পারে। তারপরে জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক আপনাকে বিভ্রান্ত করার জন্য এটি 'ক্লিক' ক্রিয়াকে আবদ্ধ করতে পারে। আমি unixpapa.com/js/mouse.html
rd

উত্তর:


64

সম্পাদনা

এই উত্তরটি অবচয় করা হয়েছে এবং ক্রোমে কাজ করে না । আপনি সম্ভবত অক্সলিংক ইভেন্টটি ব্যবহার করে শেষ করবেন তবে নীচের অন্যান্য উত্তরগুলি দেখুন please

/ সম্পাদনা


ভিক্ষার উত্তরটি সঠিক, তবে মনে হচ্ছে আপনি মিডল ক্লিকের ডিফল্ট ক্রিয়াটি আটকাতে চান। যে ক্ষেত্রে, নিম্নলিখিত অন্তর্ভুক্ত করুন

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

প্রতিরোধ ডিফল্ট () ইভেন্টের ডিফল্ট ক্রিয়া বন্ধ করবে।


19
মনে রাখবেন যে .liveঅবহিত করা হয়েছিল এবং তার পক্ষে সরানো হয়েছিল.on
নফতালি ওরফে নীল

4
আমার জন্য এফএফ কেবল মোডাউন ইভেন্টের সাথে কাজ করে। ইভেন্টটি ক্লিক করুন এই জিনিসটিকে
l00k

4
এর জন্য কি কোনও ক্রস-ব্রাউজার ধ্রুবক রয়েছে 2?
fracz

11
এটি আর ক্রোম 55 তে কাজ করে না 1 1 , 2 এবং এই প্রশ্নটি দেখুন
বিলক.cn

4
মিডল ক্লিক ক্লিক ইভেন্ট শুরু হওয়ার সাথে ট্রিগার না করে যখন সমস্যাটি ছিল তখন এটি কীভাবে সমাধান হয়?
ড্রাজেন বিজেলভুক

33

মিডল-ক্লিক / মাউস-হুইল বোতামটি সনাক্ত করার জন্য, আপনাকে ইভেন্টটি ব্যবহার করতে হবে auxclick। যেমন:

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

তারপরে আপনার স্ক্রিপ্ট ফাইলে

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

আপনি যদি জাভাস্ক্রিপ্ট থেকে এটি করতে চান (এইচটিএমএল বৈশিষ্ট্যটি ব্যবহার না করে 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 কাজ করবে তবে এটি কোনও নতুন ট্যাবে লিঙ্কটি খুলবে না ...
জোনাথন লালিবার্তে

4
এটি হ'ল একমাত্র উত্তর যা প্রকৃতপক্ষে ক্রোমে কাজ করে। ডান মাউস বোতামের জন্য যদি আপনার "ক্লিক" ইভেন্টের প্রয়োজন হয় তবে আপনি "প্রসঙ্গতা" ব্যবহার করতে পারেন (যদিও এটি কেবলমাত্র ডান ক্লিকের দ্বারা চালিত নয়): developer.mozilla.org/en-US/docs/Web/API/Element/…
হাম্পারিটারি

4
উপরের উত্তরের সাথে একত্রিত হয়ে আপনি if(event.button==1)ক্লজ দ্বারা রাইট ক্লিক ক্যাপচারকে আটকাতে পারবেন , এটিই একমাত্র কার্যকরী উত্তর।
বাডি

নোট করুন যে আপনাকে auxclickইভেন্ট দুটি ব্যবহার করতে হবে এবং এর মান পরীক্ষা করতে হবে e.button == 1। আমি উত্তর সম্পাদনা করেছি।
ফ্লিম

26

তুমি ব্যবহার করতে পার

ইভেন্ট.বাটন

কোন মাউস বোতামটি ক্লিক করা হয়েছিল তা সনাক্ত করতে।

রাষ্ট্র পরিবর্তন করে এমন বোতামটি নির্দেশ করে একটি পূর্ণসংখ্যা মান প্রদান করে।

  • স্ট্যান্ডার্ড 'ক্লিক' এর জন্য 0, সাধারণত বাম বোতাম
  • মাঝারি বোতামের জন্য 1, সাধারণত হুইল-ক্লিক করুন
  • ডান বোতামের জন্য 2, সাধারণত ডান ক্লিক করুন

নোট করুন যে এই কনভেনশনটি ইন্টারনেট এক্সপ্লোরারে অনুসরণ করা হয় না: বিশদ বিবরণের জন্য কুইর্কসড দেখুন।

পয়েন্টিং ডিভাইসটি কীভাবে কনফিগার করা হয়েছে তার উপর নির্ভর করে বোতামগুলির ক্রম ভিন্ন হতে পারে।

পড়াও

কোন মাউস বোতামটি ক্লিক করা হয়েছে?

কোন মাউস বোতামটি ক্লিক করা হয়েছে তা জানার জন্য দুটি বৈশিষ্ট্য রয়েছে: কোনটি এবং বোতামটি। দয়া করে মনে রাখবেন যে এই বৈশিষ্ট্যগুলি সর্বদা একটি ক্লিক ইভেন্টে কাজ করে না। মাউস বোতামটি নিরাপদে সনাক্ত করতে আপনাকে মোডাউনডাউন বা মাউসআপ ইভেন্টগুলি ব্যবহার করতে হবে।

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.whichjQuery উত্স - লাইন 2756 - ব্রাউজার জুড়ে এটি মানক হিসাবে ব্যবহার করার পরামর্শ দিচ্ছিif ( !event.which && event.button ) event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
রাশ ক্যাম

4
@ রুসক্যাম তবে কোনও অনুচ্ছেদে MouseEvent.whichসংজ্ঞায়িত করা হয়নি , তবে এটি ডিওএম MouseEvent.buttonএল 2 ইভেন্টে সংজ্ঞায়িত হয়েছে।
ওরিওল

@ ওরিওল সঠিক, তবে বিভিন্ন ব্রাউজার বিক্রেতাকে আলাদাভাবে প্রয়োগ করা হয়েছে। ওপি প্রশ্নটি jQuery এর সাথে ট্যাগ করেছে, সেজন্যই আমি ব্যবহারের পরামর্শ দিয়েছিলাম event.whichতবে এটি বিবৃত করা উচিত MouseEvent.whichছিল যা অফিসিয়াল স্পেসিফিকেশনের অংশ নয়।
রাশ ক্যাম

@ রহুল, than টিরও বেশি বোতামের সাথে গেমিং মাউসগুলি সম্পর্কে কী? ডিম-tech.com/blog/images/mouse%20buttons.jpg
পেসারিয়ার

আসলে, এটি শুধুমাত্র প্রাথমিক ক্লিকের জন্য ফায়ারফক্স বা ক্রোমের মতো ব্রাউজারগুলিতে কাজ করে না। দেখুন 1 , 2 এবং এই প্রশ্ন
ফ্লিম

8

লোকেরা যখন সমাধানের পরিবর্তে বিকল্প প্রস্তাব দেয় তখন আমি সাধারণত ঘৃণা করি, তবে যেহেতু সমাধান ইতিমধ্যে সরবরাহ করা হয়েছে আমি নিজের নিয়ম ভঙ্গ করতে চলেছি।

মিডল-ক্লিক বৈশিষ্ট্যটি ওভাররাইড করা ওয়েবসাইটগুলিতে সত্যই সত্যই আমাকে বাগ দিন। আমি সাধারণত মাঝখানে ক্লিক করছি কারণ আমি বর্তমান সামগ্রীতে একটি বাধাহীন দর্শন থাকার সময় নতুন ট্যাবটিতে নতুন সামগ্রীটি খুলতে চাই। আপনি যে কোনও সময় মিডল-ক্লিকের কার্যকারিতাটি একা ছেড়ে দিতে পারেন এবং আপনার ক্লিক করা উপাদানটির এইচআরএফ বৈশিষ্ট্যের মাধ্যমে প্রাসঙ্গিক সামগ্রীটি উপলব্ধ করতে পারবেন, আমি দৃ strongly়ভাবে বিশ্বাস করি যে আপনার যা করা উচিত।


4
তবে যদি আপনার ওয়েবপৃষ্ঠায় ট্যাব থাকে এবং আপনার ব্রাউজারে একই আচরণ চান? মিডলেক্লিকের তখন একটি বিদ্যমান ট্যাব বন্ধ করা উচিত।
সেএমএক্সএল

6

jQuery .whichইভেন্টের একটি বৈশিষ্ট্য সরবরাহ করে যা ক্লিক বোতাম আইডিটি বাম থেকে ডানে 1, 2, 3 হিসাবে দেয় this এই ক্ষেত্রে আপনি 2 চান want

ব্যবহার:

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


আমি কি মজিলা ব্রাউজারের কার্যকারিতা ওভাররাইড করতে পারি !! যেমন বাম ক্লিকে এটি একটি পপ আপ খোলে .... তবে মিডল ক্লিকের জন্য এটি একটি পপ আপ খুলছে না এবং একটি নতুন ট্যাব খোলা হচ্ছে যা পপ আপ খুলছে না .. সুতরাং আমি একটি মিডল ক্লিক কার্যকারিতা ওভাররাইড করতে চাই মোজিলা ....
সদেশ কুমার এন

মজিলার একটি নতুন উইন্ডোর পরিবর্তে একটি নতুন ট্যাবে সমস্ত পপআপগুলি খোলার সেটিংস রয়েছে। যদি ব্যবহারকারীটির এই বিকল্পটি সক্ষম করা থাকে তবে আমি মনে করি না যে আপনি কিছু করতে পারেন। যদি এটি না হয় তবে আপনি কিছু কোড বা সমস্যা পৃষ্ঠাতে একটি লিঙ্ক পোস্ট করতে পারেন?
25:55

এটি ফায়ারফক্স এবং ক্রোমের মতো ব্রাউজারগুলিতে কাজ করে না।
Flimm

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()এটি বলা হয়।
Flimm

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ফায়ারফক্স এবং ক্রোমের মতো ব্রাউজারগুলিতে মাঝারি মাউস বোতামটির জন্য কাজ করে না।
ফ্লিম

এটি @ ফ্লিম
নফতালি ওরফে নীল

হ্যাঁ পুরানো উত্তরের জন্য স্ট্যাক ওভারফ্লোতে ভাল সমাধান নেই। আমি ভয় করি যে আমাকে ডাউনওয়েট করতে হবে কারণ "আর এই উত্তরটি কার্যকর নয়"। সবচেয়ে খারাপটি হ'ল পিনযুক্ত উত্তরটিতে কয়েকশ বা হাজার হাজার ডাউনভোট থাকতে পারে কারণ এটি পুরানো, এবং এটি ওপি সাড়া না দিলে এটি চিরকাল স্থায়ী থাকবে।
ফ্লাইম

একটি নতুন প্রশ্ন জিজ্ঞাসা করুন :-) (এটির প্রেরণাটি উল্লেখ করে এটির মেয়াদ শেষ হয়ে গেছে এবং আপনি একটি ২০২০ উত্তর চান)। তবে এছাড়াও মাউসডাউন / মাউসআপ ইভেন্টগুলি ব্যবহার করতে পারেন?
নফতালি ওরফে নীল

এমনকি আমি যদি তা করি তবে অনুসন্ধান ইঞ্জিন থেকে আসার সময় আমার মতো লোকেরা এখনও এই উত্তরটি দেখতে পাবে এবং পিনযুক্ত ভুল উত্তর দিয়ে বিভ্রান্ত হতে চলেছে।
Flimm

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আপনার প্রথম উদাহরণের মতো মিডল ক্লিকগুলির জন্য কাজ করে না।
ফ্লিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.