所以我在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则不行。
有什么建议吗?
答案 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链接很有用