2009-10-15 50 views
113

Khi người dùng nhấp vào liên kết, tôi cần cập nhật trường trong cơ sở dữ liệu và sau đó mở liên kết được yêu cầu trong cửa sổ mới. Bản cập nhật là không có vấn đề, nhưng tôi không biết làm thế nào để mở một cửa sổ mới mà không yêu cầu họ bấm vào một siêu liên kết khác.Cách mô phỏng target = "_ blank" trong JavaScript

<body onLoad="document.getElementById('redirect').click"> 
<a href="http://www.mydomain.com?ReportID=1" id="redirect" target="_blank">Report</a> 
</body> 
+1

Hm? 'target =" _ top "' không mở trong một cửa sổ mới - 'target =" _ blank "'. – Tomalak

+0

Nếu liên kết đã mở trong cửa sổ mới (do mục tiêu = "_ trống") và trình xử lý nhấp chuột javascript đã cập nhật cơ sở dữ liệu của bạn, tại sao bạn cần phải mở cửa sổ mới bằng Javascript? –

Trả lời

208
<script> 
    window.open('http://www.example.com?ReportID=1', '_blank'); 
</script> 

Tham số thứ hai là không bắt buộc và là tên của cửa sổ mục tiêu.

+1

'window.open' thực hiện những gì' target = "_ blank" 'hiện - nó sẽ mở URL trong một cửa sổ mới. – ceejayoz

+2

có. đối số thứ hai cho window.open() là "tên" bạn muốn cung cấp cho cửa sổ, tương tự như thiết lập một mục tiêu trên một liên kết. https://developer.mozilla.org/En/DOM:window.open –

+1

Ồ, tôi hiểu. window.open bị chặn bởi trình chặn cửa sổ bật lên của Firefox, nhưng target = "_ blank" thì không. Tôi có nên yêu cầu khách hàng bật cửa sổ bật lên từ trang web của riêng họ không? –

2

Bạn có thể trích xuất các href từ thẻ:

window.open(document.getElementById('redirect').href); 
7

Tôi biết đây là một thực hiện và sắp xếp ra thỏa thuận, nhưng đây là những gì tôi đang sử dụng để giải quyết các vấn đề trong ứng dụng của tôi.

if (!e.target.hasAttribute("target")) { 
    e.preventDefault();  
    e.target.setAttribute("target", "_blank"); 
    e.target.click(); 
    return; 
} 

Về cơ bản những gì đang diễn ra ở đây là tôi kiểm tra xem liên kết có thuộc tính hay không. Nếu không, nó dừng liên kết từ kích hoạt, thiết lập nó để mở trong một cửa sổ mới sau đó nhấp chuột theo chương trình trên nó.

Bạn có thể đi một bước xa hơn và bỏ qua dừng của nhấp chuột ban đầu (và làm cho mã của bạn một toàn bộ rất nhiều nhỏ gọn hơn) bằng cách cố gắng này:

if (!e.target.hasAttribute("target")) { 
    e.target.setAttribute("target", "_blank"); 
} 

Nếu bạn đang sử dụng jQuery để tóm tắt đi thi thêm một thuộc tính qua trình duyệt, bạn nên sử dụng này thay vì e.target.setAttribute("target", "_blank"):

jQuery(event.target).attr("target", "_blank") 

bạn có thể cần phải làm lại nó để phù hợp với tình huống sử dụng chính xác của bạn, nhưng đây là cách tôi trầy xước ngứa của riêng tôi.

Dưới đây là demo trong số đó đang hoạt động để bạn gây rối.

(Liên kết trong jsfiddle trở lại cuộc thảo luận này .. không cần một tab mới :))

6

Cá nhân tôi thích sử dụng đoạn mã sau nếu nó là dành cho một liên kết duy nhất. Nếu không, nó có thể là tốt nhất nếu bạn tạo một hàm với mã tương tự.

onclick="this.target='_blank';" 

Tôi bắt đầu sử dụng để bỏ qua kiểm tra nghiêm ngặt XHTML của W3C.

+0

Tôi nghĩ JavaScript nội tuyến lộn xộn hơn việc thêm thuộc tính "không chuẩn" hoạt động ở mọi nơi. –

+0

@MattiVirkkunen trong một số trường hợp, đó là giải pháp duy nhất –

+0

@Claudiu: Nếu bạn thấy mình trong một tình huống vô lý như vậy, bạn nên sửa chữa nguyên nhân hơn kludge xung quanh nó. –

5

Đây là cách tôi làm điều đó với jQuery. Tôi có một lớp cho mỗi liên kết mà tôi muốn được mở trong cửa sổ mới.

$(function(){ 

    $(".external").click(function(e) { 
     e.preventDefault(); 
     window.open(this.href); 
    }); 
}); 
14

này có thể giúp

var link = document.createElementNS("http://www.w3.org/1999/xhtml", "a"); 
    link.href = 'http://www.google.com'; 
    link.target = '_blank'; 
    var event = new MouseEvent('click', { 
     'view': window, 
     'bubbles': false, 
     'cancelable': true 
    }); 
    link.dispatchEvent(event); 
+1

Điều này phải được chấp nhận câu trả lời. – ebilgin

+0

IE11: "Lỗi Javascript Thời gian chạy: không phải là hành động hợp lệ cho đối tượng" –

+4

Câu trả lời này có thể được cải thiện bằng cách thêm một số mô tả về những gì đang xảy ra –

1

Điều này có thể giúp bạn mở tất cả các trang liên kết:

$(".myClass").each(
    function(i,e){ 
     window.open(e, '_blank'); 
    } 
); 

Nó sẽ mở cửa hàng <a href="" class="myClass"></a> mục liên kết đến tab khác như bạn sẽ có nhấp vào từng cái một.

Bạn chỉ cần dán nó vào bảng điều khiển trình duyệt. Khuôn khổ jQuery yêu cầu

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