2012-02-13 32 views
6

Ví dụ về những gì tôi muốn làm: Trên Facebook, nhấp vào liên kết để mở liên kết trong tab hiện tại sẽ kích hoạt một số Javascript thay vì mở liên kết. Tuy nhiên, mở nó trong một tab mới (bằng cách nhấp chuột phải hoặc giữ Ctrl/Cmd) sẽ mở liên kết mà không cần gọi bất kỳ Javascript nào.Phân biệt liên kết được mở trong tab hiện tại so với tab mới

Tôi muốn thực hiện tương tự với các liên kết của mình (có hành vi liên kết phụ thuộc vào mục tiêu). Tôi có trình xử lý sự kiện onclick return false; để tránh mở liên kết; nhưng điều này khiến Ctrl + nhấp chuột không mở được liên kết. Làm thế nào để đạt được điều này?

CHỈNH SỬA: Tôi không muốn liên kết để mở mạnh trong cửa sổ mới. IF một liên kết được mở trong một cửa sổ mới, tôi muốn nó theo sau href như bình thường. Tuy nhiên, IF liên kết được mở trong cửa sổ hiện tại, thay vì theo liên kết trong cửa sổ hiện tại, tôi muốn chạy Javascript.

Facebook thực hiện việc này để mở một hình ảnh trong cửa sổ bật lên "rạp hát" nếu bạn mở nó trong cửa sổ hiện tại và mở nó trong một trang đầy đủ nếu bạn mở nó trong một cửa sổ mới.

Lưu ý rằng việc chụp sự kiện click trên các liên kết và sử dụng preventDefault() hoặc return false làm cho Cmd + Nhấp chuột (mở trong tab mới) thành không thành công. Trong mọi trường hợp, điều này sẽ làm việc bất kể như thế nào liên kết được mở ra - bấm, phím Enter vv

EDIT 2: Có vẻ như rằng hashchange/HTML5 pushState là cách chính xác để đi về vấn đề này

+0

Bạn có muốn liên kết để luôn mở trong cửa sổ mới? – ShankarSangoli

+0

bạn không thể thay đổi mục tiêu thành '_blank' trên tất cả các neo? – ZeroDivide

Trả lời

3

Bạn có thể đặt số href của dấu trỏ trỏ tới url chính xác. Bằng cách này, nhấp chuột phải và mở trong một tab hoặc cửa sổ mới sẽ hoạt động tốt.

Sử dụng jQuery để ràng buộc trình xử lý sự kiện click với neo như thế này.

$('a').click(function(e){ 
    //Do whatever javascript operation you want. 
    if(!e.ctrlKey){ 
     e.preventDefault();//Stop the page to navigate to the url set in href 
    } 
}); 

Demo

+0

Xin đừng nhầm lẫn * liên kết * (là các phần tử 'A' có thuộc tính' href') là nguồn để điều hướng, với * neo * (là các phần tử 'A' có thuộc tính' tên') điểm đến. Các phần tử 'A' có thể là cả * liên kết * và * liên kết * cùng một lúc, nhưng nó không phổ biến. – RobG

+0

Nó phụ thuộc vào yêu cầu nhưng có, chúng ta nên để cho liên kết hoạt động như một liên kết. – ShankarSangoli

+0

Cmd + Nhấp không thành công để mở liên kết khi tôi thực hiện điều này –

Các vấn đề liên quan