代码之家  ›  专栏  ›  技术社区  ›  Simon Keep

为什么JQuery生成的锚标记不会触发onclick事件?

  •  0
  • Simon Keep  · 技术社区  · 17 年前

    我正在使用jQuery动态生成一个锚标记。我已经添加了一个onclick属性,但是当我点击链接时,onclick不会触发。

    我正在生成链接,如下所示:

    $(document).ready(function() {
    
        var attributes = {
            "id": "xxx",
            "onclick": "alert('xxxx');",
            "href": "https://localhost/widget/TabTest.aspx#"
        };
        var link = $.create("a", attributes);
        $(link).append("xxxx");
        $("#WidgetContainer").append(link);
    });
    
    2 回复  |  直到 17 年前
        1
  •  4
  •   acrosman    17 年前

    使用jQuery的click()函数设置click属性。

    var attributes = {
         "id": "xxx",
         "href": "https://localhost/widget/TabTest.aspx#"
     };
     var link = $.create("a", attributes);
     $(link).append("xxxx").click(function(){ alert("HELLO"); });
     $("#WidgetContainer").append(link);
    

    您所做的可能在某些浏览器中有效,但在其他浏览器中无效(我曾在FF中使用过,但在IE中失败)。一般来说,如果jQuery有一个函数来执行某些操作,就使用它。


    编辑: 在回答亚当·巴克斯特伦对这个问题的评论时,我想我最好提供一个替代方案。当我过去做这件事时,我是这样做的:
    $("#someplace").wrapInner("<a href='#'></a>");
    $("#someplace a").click(function() {
        alert("Hello");
    });
    


    从这篇文章的评论来看,如何在一行中做到这一点(并不总是最好的主意):
    $("<a id='xxx' href='https://localhost/widget/TabTest.aspx#'>xxxx</a>")
          .click(function() { alert("Hello"); })
          .appendTo($("#WidgetContainer"));
    
        2
  •  1
  •   Andrew Hedges    17 年前

    如果您使用的是jQuery 1.3或更高版本,则可以使用“实时”事件绑定将单击事件附加到任何<A>添加到页面的标记。例如。:

    $('a').live('click', function (evt) {
        alert('Hello');
        evt.preventDefault();
    });
    var link = $.create('a', {
        'id' : 'xxx',
        'href' : 'http://localhost/'
    });
    $('#container').append(link);