使用href和javascript的jQuery附加元素不起作用

时间:2011-02-12 07:25:50

标签: javascript jquery append href

所以我在jQuery中附加了一些包含href的元素,当点击锚点时,href会调用另一个脚本,但是不起作用;这是一个例子:

$(".un_comentario").hover(

    function () {

        $("#dedos_voto", this).append($("<span id=\"commentup\" class=\"vote_up\"><a href=\"javascript:;\" ><img src=\"/mimg/comment/csthumbup.png\" /></a><?php echo $utilchido;?></span>"));

    }

);

因为你可以看到锚有一个调用另一个脚本的href,这是另一个脚本:

$(function(){

    $("span.vote_up").click(function(){
    //get the id
    the_id = $("div.un_comentario").attr('id');

        $.ajax({
            type: "POST",
            data: "action=vote_up&id="+$("div.un_comentario").attr("id"),
            url: "votacomment.php",
            success: function(){alert("Gracias, el voto se ha agregado.");
                 }

        });


        });
}); 

因此,只有元素在html标记中时脚本才有效,但如果元素附加了jQuery则不行。

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

您正在动态地将href链接添加到DOM使用.live()

$("span.vote_up").live('click',function(){

//rest of your logic

});

答案 1 :(得分:1)

以上两个答案都是正确的,但我也建议不要在锚点中使用href=\"javascript:;\",而是在jQuery函数的末尾添加return false;

我使用此网站获取JavaScript http://www.javascripttoolbox.com/bestpractices/#onclick的最佳做法(我将指导您关于锚点的部分,但整个页面值得一读)

答案 2 :(得分:1)

.live()早已弃用(在1.9中删除),我们可以停止推荐吗?正确的方法是使用.on(),如下所示:

$("#span.vote_up").on("click", function(event){
    //do this
});

jQuery documentation for .on()

此外,return false;href=\"javascript:;\"的建议都不一定是好的答案......如果您没有适当的href来替换(然后使用event.preventDefault()来防止默认行为发生),只需使用更合适的元素......

答案 3 :(得分:0)

您可以使用$("span.vote_up").live()代替$("span.vote_up").click。这会将代码绑定到所有可能稍后添加到DOM的span.vote_up元素。

我发现this链接很有用