jQuery Appended elements with href and javascript

2019-04-17 11:41发布

So I'm appending some elements with jQuery that contain href that calls another script when the anchor is clicked, but doesn't work; here's an example:

$(".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>"));

    }

);

So as you can see the anchor has an href that calls another script, here's the other script:

$(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.");
                 }

        });


        });
}); 

So the script only works if the elements are in the html markup, but not if the elements are appended with jQuery.

Any suggestion?

4条回答
爱情/是我丢掉的垃圾
2楼-- · 2019-04-17 12:23

you are dynamically adding the href links to the DOM use .live()

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

//rest of your logic

});
查看更多
我只想做你的唯一
3楼-- · 2019-04-17 12:32

The two above answers are correct, but I also recommend don't use href=\"javascript:;\" in the anchor, instead add a return false; at the end of the jQuery function.

I use this site for best practices with JavaScript http://www.javascripttoolbox.com/bestpractices/#onclick (I am directing you to the part about anchors but the whole page is worth a read)

查看更多
冷血范
4楼-- · 2019-04-17 12:33

.live() is long since deprecated (removed in 1.9), can we stop recommending it? The right approach is to use .on(), like this:

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

jQuery documentation for .on()

Also, neither the return false; or the suggestion of href=\"javascript:;\" are necessarily good answers... If you don't have an appropriate href to replace (then use event.preventDefault() to prevent default behaviour occuring), just use a more appropriate element...

查看更多
我欲成王,谁敢阻挡
5楼-- · 2019-04-17 12:34

You can use $("span.vote_up").live() instead of $("span.vote_up").click. This will bind the code to all span.vote_up elements which might get added to the DOM later.

I found this link helpful

查看更多
登录 后发表回答