Jquery .replaceWith不正常

时间:2015-07-03 13:26:25

标签: javascript jquery ajax

我有一个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>

3 个答案:

答案 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> ');
        }
    });
});