不使用`window.open`或`window.location.href`打开新窗口/选项卡

时间:2012-07-31 08:17:59

标签: jquery html dynamic new-window

我想生成一个在创建后立即点击的链接,但没有任何反应

代码:

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> 

没有错误


更新

我尝试追加它,绑定点击它,点击它并将其删除

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>See my answer.

3 个答案:

答案 0 :(得分:4)

我有答案。显然jQuery不支持default behavior of links clicked programmatically

创建和提交表单虽然效果很好(在Chrome 26FF 20IE 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();

它的作用:

  1. 创建表单
  2. 赋予其属性
  3. 将其附加到DOM,以便提交
  4. 提交
  5. 从DOM中删除表单
  6. 现在您有一个新的标签/窗口加载“https://google.nl”(或您想要的任何网址,只需替换它)。不幸的是,当您尝试以这种方式一次打开多个窗口时,在尝试打开第二个窗口时(第一个仍然打开),会弹出一个Popup阻止的消息栏。

答案 1 :(得分:2)

关于更新的脚本:如果你选择了正确的选择器($("#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();

答案 2 :(得分:1)

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事件做出了反应。 是的!问题是你为什么要这样做?