ฉันใช้onclick
เหตุการณ์ของลิงก์ที่แฮชเพื่อเปิด<div>
เป็นป๊อปอัป แต่การคลิกกลางไม่ได้ทริกเกอร์onclick
เหตุการณ์แต่รับเฉพาะhref
ค่าแอตทริบิวต์ของลิงก์และโหลด URL ในหน้าใหม่ ฉันจะใช้คลิกกลางเพื่อเปิด<div>
เป็นป๊อปอัปได้อย่างไร
ฉันใช้onclick
เหตุการณ์ของลิงก์ที่แฮชเพื่อเปิด<div>
เป็นป๊อปอัป แต่การคลิกกลางไม่ได้ทริกเกอร์onclick
เหตุการณ์แต่รับเฉพาะhref
ค่าแอตทริบิวต์ของลิงก์และโหลด URL ในหน้าใหม่ ฉันจะใช้คลิกกลางเพื่อเปิด<div>
เป็นป๊อปอัปได้อย่างไร
คำตอบ:
แก้ไข
คำตอบนี้เลิกใช้งานแล้วและใช้ไม่ได้กับ Chrome คุณอาจจะใช้เหตุการณ์ auxlinkเป็นส่วนใหญ่แต่โปรดดูคำตอบอื่น ๆ ด้านล่าง
/ แก้ไข
คำตอบของ beggs ถูกต้อง แต่ดูเหมือนว่าคุณต้องการป้องกันการกระทำเริ่มต้นของคลิกกลาง ในกรณีนี้ให้รวมสิ่งต่อไปนี้
$("#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>
PreventDefault ()จะหยุดการทำงานเริ่มต้นของเหตุการณ์
.live
มีการเลิกใช้งานและถูกลบออกเพื่อประโยชน์ของ.on
2
หรือไม่?
สำหรับปุ่มกลางคลิกเมาส์ / auxclick
ล้อที่จะตรวจพบคุณต้องใช้เหตุการณ์ เช่น:
<a href="https://example.com" onauxclick="func()" id="myLink"></a>
จากนั้นในไฟล์สคริปต์ของคุณ
function func(e) {
if (e.button == 1) {
alert("middle button clicked")
}
}
หากคุณต้องการทำจาก JavaScript (โดยไม่ใช้แอตทริบิวต์ 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>
if(event.button==1)
ข้อนี่เป็นคำตอบเดียวที่ใช้ได้ผล
auxclick
e.button == 1
ฉันแก้ไขคำตอบ
คุณสามารถใช้ได้
เพื่อระบุว่าปุ่มเมาส์ใดถูกคลิก
ส่งคืนค่าจำนวนเต็มที่ระบุปุ่มที่เปลี่ยนสถานะ
โปรดทราบว่าไม่มีการปฏิบัติตามหลักการนี้ใน Internet Explorer: ดู 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>
event.which
เนื่องจากได้รับการกำหนดมาตรฐานในเบราว์เซอร์ในแหล่งที่มา jQuery - บรรทัด 2756 -if ( !event.which && event.button ) event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
MouseEvent.which
ไม่ได้กำหนดไว้ในข้อมูลจำเพาะใด ๆ แต่MouseEvent.button
กำหนดไว้ในเหตุการณ์ DOM L2
event.which
แต่ควรมีรายละเอียดที่MouseEvent.which
ไม่ได้เป็นส่วนหนึ่งของข้อกำหนดอย่างเป็นทางการ
ฉันมักจะเกลียดเวลาที่มีคนเสนอทางเลือกแทนวิธีแก้ปัญหา แต่เนื่องจากมีวิธีแก้ปัญหาแล้วฉันจะทำลายกฎของตัวเอง
เว็บไซต์ที่มีการลบล้างคุณลักษณะคลิกกลางมักจะทำให้ฉันติดขัดจริงๆ ฉันมักจะคลิกตรงกลางเพราะต้องการเปิดเนื้อหาใหม่ในแท็บใหม่ในขณะที่มีมุมมองที่ไม่มีสิ่งกีดขวางของเนื้อหาปัจจุบัน เมื่อใดก็ตามที่คุณสามารถออกจากฟังก์ชันคลิกกลางเพียงอย่างเดียวและทำให้เนื้อหาที่เกี่ยวข้องพร้อมใช้งานผ่านแอตทริบิวต์ HREF ขององค์ประกอบที่คุณคลิกฉันเชื่ออย่างยิ่งว่านั่นคือสิ่งที่คุณควรทำ
คำถามนี้เก่าไปหน่อย แต่ฉันพบวิธีแก้ไข:
$(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>
Chrome ไม่เริ่มเหตุการณ์ "คลิก" สำหรับวงล้อเมาส์
ทำงานใน FF และ Chrome
e.preventDefault()
จะเรียกว่า
jQuery มี.which
แอตทริบิวต์ในเหตุการณ์ที่ให้รหัสปุ่มคลิกจากซ้ายไปขวาเป็น 1, 2, 3 ในกรณีนี้คุณต้องการ 2
การใช้งาน:
$("#foo").live('click', function(e) {
if( e.which == 2 ) {
alert("middle button");
}
});
คำตอบของ Adamantium ก็ใช้ได้เช่นกัน แต่คุณต้องระวัง IE ในขณะที่เขาบันทึก:
$("#foo").live('click', function(e) {
if((!$.browser.msie && e.button == 1) || ($.browser.msie && e.button == 2)) {
alert("middle button");
}
});
ยังจำ.button
แอตทริบิวต์ 0 การจัดทำดัชนีไม่ได้ 1 .which
การจัดทำดัชนีเช่น
วิธีการที่เหมาะสมคือการใช้.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
นี้ใช้ไม่ได้กับปุ่มกลางของเมาส์ในเบราว์เซอร์เช่น Firefox และ Chrome
ฉันรู้ว่าฉันมาสายปาร์ตี้ แต่สำหรับผู้ที่ยังมีปัญหาในการจัดการคลิกกลางโปรดตรวจสอบว่าคุณมอบหมายงานหรือไม่ ในกรณีของการมอบหมาย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
ไม่สามารถใช้ได้กับคลิกกลางเหมือนในตัวอย่างแรกของคุณ