Открытие нового окна/вкладки без использования `window.open` или` window.location.href`

Я хочу создать ссылку, которая будет нажата сразу после создания, но ничего не произойдет

код:

var link = $("<a></a>");
link.attr("href", "/dostuff.php");
link.attr("target", "_blank");
link.click();

Атрибуты установлены правильно:

var link = $("<a></a>");
link.attr("href", "/dostuff.php");
link.attr("target", "_blank");
var linkcheck = link.wrap('<p>').parent().html();
console.log(linkcheck);

Это возвращает:

<a href="/dostuff.php" target="_blank"></a> 

Нет ошибок


UPDATE

Я попытался добавить его, привязать к нему, щелкнуть его и удалить.

var link = $("<a></a>");
link.attr(
{
    id    : "linky",
    href  : "/dostuff.php",
    target: "_blank"
});
$("body").append(link);
$("#linky").on("click", function() { console.log("Link clicked"); });
$("#linky").click();
$("#linky").remove();

Действие клика выполняется, но действие по умолчанию (открыть ссылку) не выполняется.


UPDATE2

Я нашел решение: создание и отправка <form>! См. мой ответ.

Ответ 1

У меня есть ответ. По-видимому, jQuery не поддерживает поведение по умолчанию ссылок, щелкнутых программно

Создание и отправка формы работает очень хорошо (проверено в Chrome 26, FF 20 и IE 8):

var form = $("<form></form>");
form.attr(
{
    id     : "newform",
    action : "https://google.nl",
    method : "GET",
    target : "_blank"        // Open in new window/tab
});

$("body").append(form);
$("#newform").submit();
$("#newform").remove();

Что он делает:

  • Создать форму
  • Дайте ему атрибуты
  • Добавьте его в DOM, чтобы он мог быть отправлен
  • Отправить
  • Удалить форму из DOM

Теперь у вас есть новая вкладка/окно загрузки https://google.nl" (или любой URL-адрес, который вы хотите, просто замените его). К сожалению, когда вы пытаетесь открыть несколько окон одновременно, вы получаете всплывающее окно с заблокированным сообщением при попытке открыть второй (первый из них все еще открыт).

Ответ 2

Что касается вашего обновленного script: если вы правильно выбрали селектор ($("#linky")), он работает.

var link = $("<a id='linky'>Hello</a>");
link.attr("href", "/dostuff.php");
link.attr("target", "_blank");
$("body").append(link);
$("#linky").on("click", function() {alert("hai");});
$("#linky").click();
$("#linky").remove();

Ответ 3

var link = $("<a id='linky'></a>");
link.attr("href", "/dostuff.php");
link.attr("target", "_blank");
$("body").append(link);
$("linky").live("click", function() {alert("hai"); $(this).remove()});
$("linky").click();
//$("linky").remove();

Итак, вы на самом деле реагируете на событие click. И да! Вопрос в том, почему вы хотите это сделать?