Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery.replaceWith无法正常工作_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript Jquery.replaceWith无法正常工作

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

我有一个jquery代码,它阻止链接转到该链接,但执行它。我遇到的问题是,在脚本执行之后,脚本返回数据,我想用一个新的、但具有相同类的数据替换它。替换是在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>

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