2

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

代码:

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

正在执行单击操作,但未执行默认操作(打开链接)。


更新2

我找到了解决方案:创建并提交一个<form>看我的回答。

4

3 回答 3

4

我有答案。显然 jQuery 不支持以编程方式单击链接的默认行为

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

它能做什么:

  1. 创建表单
  2. 给它属性
  3. 将其附加到 DOM 以便可以提交
  4. 提交
  5. 从 DOM 中删除表单

现在你有一个新的标签/窗口加载“ https://google.nl ”(或任何你想要的 URL,只需替换它)。不幸的是,当您尝试以这种方式一次打开多个窗口时,在尝试打开第二个窗口(第一个仍然打开)时,您会收到一个弹出窗口阻止的消息栏。

于 2012-07-31T09:22:15.133 回答
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();
于 2012-07-31T08:55:37.923 回答
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();

所以你实际上对点击事件做出反应。是的!问题是你为什么要这样做?

于 2012-07-31T09:01:13.550 回答