Javascript Jquery.replaceWith无法正常工作
我有一个jquery代码,它阻止链接转到该链接,但执行它。我遇到的问题是,在脚本执行之后,脚本返回数据,我想用一个新的、但具有相同类的数据替换它。替换是在dom中进行的,但下次我按下该链接时,不会转到该链接,但类是相同的,下面是我的代码:Javascript Jquery.replaceWith无法正常工作,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个jquery代码,它阻止链接转到该链接,但执行它。我遇到的问题是,在脚本执行之后,脚本返回数据,我想用一个新的、但具有相同类的数据替换它。替换是在dom中进行的,但下次我按下该链接时,不会转到该链接,但类是相同的,下面是我的代码: <script> $(".recomanda").click(function(e){ e.preventDefault(); var test=$(this); var href = $(this).attr('href
<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>
$(“.recomanda”)。单击(函数(e){
e、 预防默认值();
var测试=$(此);
var href=$(this.attr('href');
$.getJSON(href,函数(数据){
if(data.recom==1)
{
$(测试)。替换为(“”);
}
if(data.recom==0)
{
$(测试)。替换为(“”);
}
});
});
html
<a class="recomanda" href="app/recomanda_produs.php?id='.$row['ID_Produs'].'&recom=0">Recomanda</a>
是的,我以前也遇到过这个问题,这是因为当您在ready()上附加单击以重新编译时,但是当ajax加载时,ready()中的所有内容都不会再次触发,这就是为什么您需要将事件附加到非动态元素,并让它找到子选择器的原因
$('body').on('click', '.recomanda', function() {});
您需要将事件委托给父级,以便可以将其应用于特定的子级,无论它们是现在存在还是将来存在 见:
$(“body”)。在函数(e)上(“单击”和“.recomanda”){
e、 预防默认值();
var测试=$(此);
var href=$(this.attr('href');
$.getJSON(href,函数(数据){
if(data.recom==1){
$(测试)。替换为(“”);
}
if(data.recom==0){
$(测试)。替换为(“”);
}
});
});
当您调用replaceWith
时,实际上您正在删除绑定到onclick处理程序的元素:
.替换为()
描述:将匹配元素集中的每个元素替换为
提供了新内容,并返回所提供的元素集
删除
其主要思想是处理程序必须绑定到同一元素(单击时不会删除该元素)。
因此,不要使用replaceWith
方法,而是使用修改现有元素的方法,如下所示:
test.attr('href', blablabla);
这不是问题,但是第二次您不需要将
$
与test
变量一起使用。我认为问题在于您附加事件的方式,请尝试此$('body')。on('click','.recomanda',function(){});嗯,它在前面的body上工作,我尝试了$(“.recomanda”)。在('click',function(e){}
上,它不工作,看起来你的答案很好,你能把它添加为一个答案,让我接受吗?
test.attr('href', blablabla);