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

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

$(".un_comentario").hover( function () { $("#dedos_voto", this).append($("")); } ); 

因此,您可以看到锚具有调用另一个脚本的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则不行。

有什么建议吗?

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

 $("span.vote_up").live('click',function(){ //rest of your logic }); 

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

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

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

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

.on()的jQuery文档

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

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

我发现此链接很有帮助