2012-11-07 33 views
6

Tôi có một liên kết (neo) có một href đính kèm với nó để điều hướng đến một URL cụ thể nói 'www.bla.com'.Ctrl + nhấp vào liên kết với trình xử lý nhấp chuột

<a href='http://www.bla.com' /> 

Tôi cũng có một click xử lý kèm theo các liên kết mà thực hiện một số hành động và sau đó mở ra một cái nhìn html trong cùng một cửa sổ. Mọi thứ hoạt động hoàn hảo tốt.

Tuy nhiên, khi người dùng sử dụng 'ctrl + click' để mở liên kết trong tab/cửa sổ mới, trình xử lý nhấp dường như được ưu tiên và mở chế độ xem html trong cùng một cửa sổ. Nhưng tôi muốn giữ lại hành vi 'ctrl + click' và cho phép người dùng mở liên kết trong một tab/cửa sổ mới (giống như một liên kết bình thường). Làm thế nào tôi có thể làm điều đó?

Cảm ơn trước!

+0

Bạn đang sử dụng gì trong trình xử lý? Tôi đã cố gắng sao chép nó và điều duy nhất tôi có thể tìm thấy mà dừng lại nó là một 'alert' – Bankzilla

+0

Có nhiều phím thay đổi hành vi mặc định. Bạn nên sử dụng một cái gì đó như ['filter-alter- clicks'] (https://github.com/bfred-it/filter-altered-clicks) để xử lý nó cho bạn. –

Trả lời

6
function process(e){ 
    var evt = e ? e:window.event; 
    if(evt.ctrlKey) 
     alert("ctrlClicked"); 
}​ 

evt.ctrlKey sẽ trả về true nếu phím điều khiển được nhấn, bạn có thể viết điều kiện của bạn trong khối "if", tôi đã thử nghiệm điều này chỉ cho chrome và ff.

0
<a target="_blank" href='http://www.bla.com' /> 

Thêm mục tiêu = "_ blank" vào trong thẻ liên kết.

+0

không hoạt động, tôi sợ, vì _blank mở liên kết trong tab/cửa sổ mới ngay cả khi nhấp chuẩn (không phải thứ tôi muốn). – Saket

+0

Bạn có thể thêm một trình lắng nghe chính để phát hiện khi nào ctrl được giữ lại, sau đó chỉ cần thay đổi thông số đích theo nếu nó được giữ hoặc không. (được giữ? "_blank": "_self") –

0

Kết hợp click event object sẽ có thuộc tính ctrlKey được đặt thành true nếu phím điều khiển (hoặc tương đương) được nhấn khi nhấp chuột xảy ra. Kiểm tra đối tượng sự kiện và nếu phím điều khiển được nhấn, không làm điều "xem HTML".

<a href="#" onclick="alert(event.ctrlKey);">Click me!</a> 

Tuy nhiên, nếu người dùng kích hoạt liên kết theo cách khác, bạn có thể hoặc không nhận được sự kiện nhấp chuột.

ví dụ:

  1. nút bên phải -> "mở trong tab/cửa sổ mới" - không có sự kiện nhấp chuột (Firefox, IE)
  2. Tab để tập trung vào việc liên kết, nhấn Enter - công văn nhấn sự kiện (Firefox, IE)
1

Có lẽ một cái gì đó như thế này?

function onclick(e){ 
    var event = e ? e:window.event; 
    this.target = event.ctrlKey?"_blank":"_self"; 
}​ 
Các vấn đề liên quan