ฉันจะเปิดลิงค์ในหน้าต่างใหม่ได้อย่างไร?


94

ฉันมีตัวจัดการการคลิกสำหรับลิงก์เฉพาะซึ่งฉันต้องการทำสิ่งที่คล้ายกับสิ่งต่อไปนี้:

window.location = url

ฉันต้องการสิ่งนี้เพื่อเปิด url ในหน้าต่างใหม่จริงๆฉันจะทำอย่างไร

คำตอบ:


204

คุณสามารถชอบ:

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

jQuery:

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

นอกจากนี้คุณยังสามารถตั้งค่าtargetการ_blankจริง


แต่รหัส jquery นี้จะไม่นำทางไปยังเป้าหมายโดยอัตโนมัติ
Amr Elgarhy

26
_blank เป็นเป้าหมายเริ่มต้นดังนั้นการใช้ window.open (url) ควรเพียงพอ
themerlinproject

ไม่แน่ใจว่าจะช่วยได้และไม่ใช่ปัญหาเดียวกัน แต่ฉันกำลังค้นหาวิธีแก้ปัญหาเดียวกันเพื่อดาวน์โหลดไฟล์ (ไม่ใช่จากลิงก์ แต่เป็นปุ่ม) และบน Chrome หน้าต่างไม่เปิดขึ้นและไม่มีการดาวน์โหลดจนกว่าฉันจะเปลี่ยนเป็น window.location = 'url' ซึ่งไม่เปลี่ยนตำแหน่ง แต่ดาวน์โหลดไฟล์ ...
gdoumenc

window.open (url) ได้ดี :)
fudu

34

วิธีบังคับเป้าหมายภายในเครื่องจัดการคลิกมีดังนี้

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

5
ไม่จำเป็นต้องใช้ตัวเลือก jQuery ในตัวจัดการการคลิกดังนั้นจึง$(this).attr('target', '_blank'); สามารถเปลี่ยนบรรทัดเป็นthis.target = "_blank";นอกจากนี้หากลิงก์จุดยึดบนเพจสามารถแก้ไขให้มีrel="external"แอตทริบิวต์ได้คุณสามารถสร้างตัวจัดการการคลิกส่วนกลางสำหรับเพจด้วยตัวเลือก jQuery a[rel="external"]แทนที่จะมี ตัวจัดการการคลิกต่อลิงก์ที่เลือกด้วยa#link_id
himanshu

17

คุณจะต้องใช้ window.open(url);

ข้อมูลอ้างอิง:
http://www.htmlcodetutorial.com/linking/linking_famsupp_120.html
http://www.w3schools.com/jsref/met_win_open.asp


5
อ๊ะ! อย่าใช้หรือเชื่อมโยงกับ w3schools มันไม่เกี่ยวข้องกับ W3C ใช้ MDN แทน: developer.mozilla.org/en-US/docs/Web/API/Window.open
AB Carroll

5
w3schools ดี (ละเว้น w3c trolls 'ไม่กี่') ... จะยังคงเป็นแหล่งข้อมูลที่เชื่อถือได้ ... แม้ตอนนี้ w3c จะสำรองข้อมูลอีกครั้ง ;-)
Dawesi

4

คุณยังสามารถใช้ jquery prop () วิธีการนี้

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

2

ฉันเพิ่งพบวิธีแก้ปัญหาที่น่าสนใจสำหรับปัญหานี้ ฉันกำลังสร้างช่วงที่มีข้อมูลตามผลตอบแทนจากบริการบนเว็บ ฉันคิดว่าจะพยายามใส่ลิงค์รอบ ๆ ช่วงเวลาเพื่อที่ว่าถ้าฉันคลิกที่มัน "a" จะจับการคลิก

แต่ฉันพยายามจับภาพการคลิกด้วยช่วงเวลา ... ดังนั้นฉันจึงคิดว่าทำไมไม่ทำสิ่งนี้เมื่อฉันสร้างช่วง

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

จากนั้นฉันผูกตัวจัดการคลิกกับช่วงที่สร้างลิงก์ตามแอตทริบิวต์ "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'));
});

สิ่งนี้ทำให้ฉันสามารถคลิกที่ช่วงและเปิดหน้าต่างใหม่ด้วย url ที่ถูกต้องได้สำเร็จ



1

วิธีนี้ยังพิจารณากรณีที่ url ว่างเปล่าและปิดใช้งาน (สีเทา) ลิงก์ว่าง

$(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

โปรดทราบว่าคุณต้องการดำเนินการตามคำขอ AJAXภายในฟังก์ชันตัวจัดการเหตุการณ์สำหรับเหตุการณ์คลิกหรือไม่ ด้วยเหตุผลบางประการ Chrome (และอาจเป็นเบราว์เซอร์อื่น ๆ ) จะไม่เปิดแท็บ / หน้าต่างใหม่


0

นี่ไม่ใช่การแก้ไขที่ดีมาก แต่ใช้งานได้:

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();
});

ตัวอย่างสด: http://jsfiddle.net/7eRLb/


0

Microsoft IE ไม่สนับสนุนชื่อเป็นอาร์กิวเมนต์ที่สอง

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

ปัญหาคือwindow name. สิ่งนี้จะได้ผล:

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

Microsoft อนุญาตเฉพาะอาร์กิวเมนต์ต่อไปนี้หากใช้อาร์กิวเมนต์นั้นเลย:

  • _blank
  • _ สื่อ
  • _parent
  • _ค้นหา
  • _ ตัวเอง
  • _top

ตรวจสอบไซต์ Microsoft นี้


4
-1: สำเนา / วางที่ละเมิดใบอนุญาตของคุณจากstackoverflow.com/a/1462500/560648อย่างไรก็ตามนั่นไม่เป็นความจริง อาร์กิวเมนต์ที่จะได้รับการสนับสนุน ต้องไม่มีช่องว่างหรือขีดกลางหรือเครื่องหมายวรรคตอนอื่น ๆ อ่านคำตอบและความคิดเห็นอื่น ๆ เกี่ยวกับคำถามนั้น
Lightness Races ในวงโคจร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.