我有一个jquery代码阻止链接转到该链接但执行它。我遇到的问题是,在executs脚本和脚本返回数据后,我想用一个新的替换它,但使用相同的类。替换是在dom内部进行,但是下次我按下该链接并不是要阻止进入该链接但类是相同的,这是我的代码:
<script>
$(".recomanda").click(function(e){
e.preventDefault();
var test=$(this);
var href = $(this).attr('href');
$.getJSON(href, function(data) {
if(data.recom==1)
{
$(test).replaceWith('<a class="recomanda" href="app/recomanda_produs.php?id=' + data.id + '&recom=' + data.recom + '">Recomandat</a> ');
}
if(data.recom==0)
{
$(test).replaceWith('<a class="recomanda" href="app/recomanda_produs.php?id=' + data.id + '&recom=' + data.recom + '">Recomanda</a> ');
}
});
});
</script>
HTML
<a class="recomanda" href="app/recomanda_produs.php?id='.$row['ID_Produs'].'&recom=0">Recomanda</a>
答案 0 :(得分:1)
是的,我之前遇到过这个问题,因为当你在ready()上附加点击到recomanda时,但是当ajax加载时,所有准备好的()都会再次开火,这就是为什么你需要将事件附加到非动态元素,并让它找到它的子选择器。
$('body').on('click', '.recomanda', function() {});
答案 1 :(得分:1)
当您实际调用replaceWith
时,您将删除绑定到onclick处理程序的元素:
.replaceWith()
描述:用匹配替换匹配元素集中的每个元素 提供的新内容并返回该元素集 除去。
主要思想是你必须将处理程序绑定到同一个元素(单击时不删除)。
因此,不要使用replaceWith
方法使用方法修改现有元素,如下所示:
test.attr('href', blablabla);
这不是问题,但第二次您不需要将$
与test
变量一起使用。
答案 2 :(得分:0)
您需要将事件委托给父母,以便它可以应用于现在或将来存在的特定儿童。
请参阅:http://learn.jquery.com/events/event-delegation/
$("body").on("click", ".recomanda", function(e){
e.preventDefault();
var test=$(this);
var href = $(this).attr('href');
$.getJSON(href, function(data) {
if(data.recom==1){
$(test).replaceWith('<a class="recomanda" href="app/recomanda_produs.php?id=' + data.id + '&recom=' + data.recom + '">Recomanda"+((data.recom==1)?"t":"")+"</a> ');
}
if(data.recom==0){
$(test).replaceWith('<a class="recomanda" href="app/recomanda_produs.php?id=' + data.id + '&recom=' + data.recom + '">Recomanda</a> ');
}
});
});