Làm cách nào để mở liên kết trong cửa sổ mới?


94

Tôi có một trình xử lý nhấp chuột cho một liên kết cụ thể, bên trong đó tôi muốn làm điều gì đó tương tự như sau:

window.location = url

Tuy nhiên, tôi cần điều này để thực sự mở url trong một cửa sổ mới, làm cách nào để thực hiện việc này?

Câu trả lời:


204

Bạn có thể thích:

window.open('url', 'window name', 'window settings')

jQuery:

$('a#link_id').click(function(){
  window.open('url', 'window name', 'window settings');
  return false;
});

Bạn cũng có thể thiết lập targetđể _blankthực sự.


nhưng mã jquery này sẽ không tự động điều hướng đến mục tiêu
Amr Elgarhy

26
_blank là mục tiêu mặc định, do đó, sử dụng window.open (url) là đủ
themerlinproject

Không chắc chắn sẽ giúp ích và không chính xác vấn đề tương tự nhưng tôi đang tìm kiếm giải pháp tương tự để tải xuống tệp (không phải từ liên kết mà là nút) và trên Chrome, cửa sổ không mở và không tải xuống cho đến khi tôi chỉ cần thay đổi thành window.location = 'url' không thay đổi vị trí nhưng tải xuống tệp ...
gdoumenc

window.open (url) vẫn ổn :)
fudu

33

Đây là cách để buộc mục tiêu bên trong trình xử lý nhấp chuột:

$('a#link_id').click(function() {
    $(this).attr('target', '_blank');
});

5
Không cần sử dụng bộ chọn jQuery trong trình xử lý nhấp chuột để dòng $(this).attr('target', '_blank'); có thể được thay đổi thành this.target = "_blank";Ngoài ra, nếu các liên kết neo trên trang có thể được sửa đổi để có rel="external"thuộc tính thì bạn có thể tạo trình xử lý nhấp chuột toàn cục cho trang bằng công cụ chọn jQuery a[rel="external"]thay vì có trình xử lý nhấp chuột cho mỗi liên kết được chọn vớia#link_id
heanshu

17

5
Rất tiếc! Không sử dụng hoặc liên kết đến w3schools, nó KHÔNG được liên kết với W3C. Sử dụng MDN thay thế: developer.mozilla.org/en-US/docs/Web/API/Window.open
AB Carroll

5
w3schools là tốt (bỏ qua 'vài' troll w3c) ... sẽ tiếp tục là một nguồn có thẩm quyền ... thậm chí w3c hiện đang ủng hộ nó một lần nữa ;-)
Dawesi

4

Bạn cũng có thể sử dụng phương thức jquery prop () cho việc này.

$(function(){
  $('yourselector').prop('target', '_blank');
}); 

2

Tôi vừa tìm thấy một giải pháp thú vị cho vấn đề này. Tôi đang tạo các khoảng có chứa thông tin dựa trên lợi nhuận từ một dịch vụ web. Tôi đã nghĩ về việc cố gắng đặt một liên kết xung quanh khoảng thời gian để nếu tôi nhấp vào nó, "a" sẽ bắt được nhấp chuột.

Nhưng tôi đang cố gắng nắm bắt cú nhấp chuột với khoảng cách ... vì vậy tôi nghĩ tại sao không làm điều này khi tôi tạo khoảng cách.

var span = $('<span id="something" data-href="'+url+'" />');

Sau đó, tôi đã liên kết một trình xử lý nhấp chuột vào khoảng thời gian tạo liên kết dựa trên thuộc tính 'data-href':

span.click(function(e) {
    e.stopPropagation();
    var href = $(this).attr('data-href');
    var link = $('<a href="http://' + href + '" />');
    link.attr('target', '_blank');
    window.open(link.attr('href'));
});

Điều này thành công cho phép tôi nhấp vào một khoảng và mở một cửa sổ mới với một url thích hợp.


1

Có chuyện gì vậy <a href="myurl.html" target="_blank">My Link</a>? Không cần Javascript ...


1

giải pháp này cũng đã xem xét trường hợp url trống và vô hiệu hóa (màu xám) liên kết trống.

$(function() {
  changeAnchor();
});

function changeAnchor() {
  $("a[name$='aWebsiteUrl']").each(function() { // you can write your selector here
    $(this).css("background", "none");
    $(this).css("font-weight", "normal");

    var url = $(this).attr('href').trim();
    if (url == " " || url == "") { //disable empty link
      $(this).attr("class", "disabled");
      $(this).attr("href", "javascript:void(0)");
    } else {
      $(this).attr("target", "_blank");// HERE set the non-empty links, open in new window
    }
  });
}
a.disabled {
  text-decoration: none;
  pointer-events: none;
  cursor: default;
  color: grey;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<a name="aWebsiteUrl" href="http://www.baidu.com" class='#'>[website]</a>
<a name="aWebsiteUrl" href=" " class='#'>[website]</a>
<a name="aWebsiteUrl" href="http://www.alibaba.com" class='#'>[website]</a>
<a name="aWebsiteUrl" href="http://www.qq.com" class='#'>[website]</a>


0

Hãy lưu ý nếu bạn muốn thực hiện các yêu cầu AJAX bên trong hàm xử lý sự kiện cho sự kiện nhấp chuột. Vì lý do nào đó, Chrome (và có thể các trình duyệt khác) sẽ không mở tab / cửa sổ mới.


0

Đây không phải là một bản sửa lỗi rất hay nhưng nó hoạt động:

CSS:

.new-tab-opener
{
    display: none;
}

HTML:

<a data-href="http://www.google.com/" href="javascript:">Click here</a>
<form class="new-tab-opener" method="get" target="_blank"></form>

Javascript:

$('a').on('click', function (e) {    
    var f = $('.new-tab-opener');
    f.attr('action', $(this).attr('data-href'));
    f.submit();
});

Ví dụ trực tiếp: http://jsfiddle.net/7eRLb/


0

Microsoft IE không hỗ trợ tên là đối số thứ hai.

window.open('url', 'window name', 'window settings');

Vấn đề là window name. Điều này sẽ hoạt động:

window.open('url', '', 'window settings')

Microsoft chỉ cho phép các đối số sau, Nếu sử dụng đối số đó:

  • _chỗ trống
  • _phương tiện truyền thông
  • _cha mẹ
  • _Tìm kiếm
  • _chính mình
  • _hàng đầu

Kiểm tra trang web này của Microsoft


4
-1: Mặc dù sao chép / dán vi phạm giấy phép của bạn từ stackoverflow.com/a/1462500/560648 , điều đó không đúng. Đối số được hỗ trợ . Nó chỉ không thể chứa dấu cách hoặc dấu gạch ngang hoặc dấu câu khác. Đọc các câu trả lời và nhận xét khác về câu hỏi đó.
Lightness Races in Orbit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.