2012-02-29 3 views
1

Я пытаюсь получить ссылку, которая будет открыта на текущей странице, или когда нажатие команды/ctrl (и т. Д.) Откроется в новой вкладке/окне на основе настроек пользователей. Сейчас я использую что-то вроде этого:Ссылка на Javascript с возможностью открытия в новой вкладке/окне

<a href='http://example.com' onclick="setTimeout(function() {window.location='/some_local_page'}, 10); return false;">Foo!</a> 

Это позволяет мне нажать на ссылку и он открыть локальную страницу, но у меня явно правой кнопкой мыши и выберите Открыть в новом окне/окна. Я уверен, что это проблема, но я не могу найти правильную комбинацию ключевых слов google/stackoverflow. :)

Это может помочь разъяснить:

<a href='http://example.com' onclick="some_javascript_function(); return false;">Foo!</a> 

В этом случае щелчок следует назвать some_javascript_function() и должен открыть "http://example.com" в новой вкладке командной/Ctrl + Click/window и ничего не делать с текущей страницей.

+2

Почему вы пытаетесь вообще что-либо сделать? Это поведение по умолчанию в большинстве браузеров. Если вы просто не вернете false и не используете бизнес window.location и не переопределяете поведение по умолчанию клика (которого вы не являетесь), это должно работать автоматически. –

+0

Что вы пытаетесь сделать? Почему вы используете 'setTimeout' для перенаправления меня на совершенно другую страницу из ссылки, на которую я нажал? Я весьма озадачен. Какую ссылку вы хотите открыть и где вы хотите ее открыть? У вашего 'onclick' есть' return false', который обычно отключает браузер от ссылки. –

+1

Мессинг по умолчанию браузера поведение почти всегда звучит как плохая идея. – kirilloid

ответ

7

Это то, что вы хотите?

<a href="http://example.com" onclick="window.open('/some_local_page')">Foo!</a> 

Или это?

<a href="/some_local_page" target="_blank">Foo!</a> 

EDIT: onclick будет срабатывать, когда центр или левая кнопка нажата (но не правая кнопка).

Итак, в onclick вам нужно определить, было ли нажато ctrl или была средняя кнопка.

Я также предлагаю не устанавливать JavaScript в линию. Попробуйте это:

<a href="http://example.com" class="link" data-link="/some_local_page">Foo!</a>​ 

$('a.link').click(function(e){ 
    if(e.button === 0 && !e.ctrlKey){ // Click without ctrl 
     e.preventDefault(); 
     // open local page 
     window.location = $(this).data('link'); 
    } 
    // Middle click and ctrl click will do nothing, 
    // thus allowing the brower to open in a new window 
});​ 

DEMO: http://jsfiddle.net/E8hEt/

+0

Для первого, это определенно не то поведение, которое я ищу. Если вы нажмете на ссылку, вы получите новую вкладку в/some_local_page, и текущая страница перейдет на страницу «http://example.com». Если вы нажмете команду/ctrl, она откроется как в новых окнах. – Nik

+0

Для второго, см. Выше. – Nik

+0

@Nik: Что * * * поведение, которое вы хотите? –

1

Почему вы не сделать то же URL в HREF атрибута, если вы хотите пойти в тот же URL ?. И чтобы открыть его в новом окне, установите цель на _blank.

<a href='/some_local_page' target='_blank'>Foo!</a> 
+0

Я не пытаюсь просто открыть/some_local_page в новом окне. Я хочу открыть/some_local_page в текущем окне и «http://example.com» в другой вкладке/окне, если пользовательская команда/элемент управления нажимает на ссылку. – Nik

+0

@ Downvoter - Можете ли вы оставить причину также для -1? – ShankarSangoli

Смежные вопросы