Открытие нового окна/вкладки без использования `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.
И да! Вопрос в том, почему вы хотите это сделать?