ajax调用后,addClass()函数不起作用

时间:2015-12-23 10:31:59

标签: javascript jquery ajax

我做了一个简单的AJAX调用,在有人点击一个锚之后它就会触发。在AJAX成功之后,我想在触发AJAX的锚点添加一个类。

虽然脚本工作正常,并且success函数返回所有正确的数据,但当我尝试addClass()时它不起作用。我使用hide()方法来查看jQuery是否正确运行,它也不起作用。控制台不会打印任何错误。

为了调试我使用了一个警报,它的工作原理!警报如何正常工作,addClass()hide()都没有?

<a href="#" class="refreshor" value="20">1</a>
<a href="#" class="refreshor" value="40">2</a>
jQuery(document).ready(function($) {
    $('.refreshor').on('click',function(e){
        e.preventDefault();
        var search = $('#searchin').val();
        var page = $(this).text();
        var that = this;
        $.ajax({    
            type: "POST",
            url: "components/com_tagger/scripts/ajaxSearch.php",
            data: {
                "search": search,
                "page": page
            },
            success:function(response) {
                $('.ajaxSearchResults').html(response);
                $(that).addClass('preventer'); //this doesnt work
                $(that).hide(); //this doesnt work
                var test = $(that).text(); 
                alert(test); //this works!                  
            } 
        });
    });
});

5 个答案:

答案 0 :(得分:4)

在成功回调中,您可以替换.ajaxSearchResults

的内容
$('.ajaxSearchResults').html(response);

然后that不是指这个容器内的那些。

您需要使用委托,这将允许您绑定尚未在DOM中的元素的事件

$('.ajaxSearchResults').on('click', '.refreshor',function(e){
    e.preventDefault();
    var search = $('#searchin').val();
    var page = $(this).text();

    var thisValue = $(this).attr('value'); // save the current value of the `a` clicked
    $.ajax({    
        type: "POST",
        url: "components/com_tagger/scripts/ajaxSearch.php",
        data: {
            "search": search,
            "page": page
        },
        success:function(response) {
            $('.ajaxSearchResults').html(response);

            var that = $('.ajaxSearchResults').find('.refreshor[value="'+thisValue+'"]'); 
            // look for the `a` that have the saved value.

            that.addClass('preventer');
            that.hide(); 
            var test = that.text(); 
            alert(test);        
        } 
    });
});

答案 1 :(得分:4)

您已(在评论中)声明您所拥有的链接(您正在尝试添加类的链接)是您要替换整个内容的面板内的参考。

通过替换内容,您对链接的引用不再位于DOM中。您需要有一些方法来识别哪个链接被按下,并在替换的标记中再次找到该链接。

一个建议是使用data-*属性标识链接(value不是a元素的有效属性)

<a href="#" class="refreshor" data-value="20">1</a>
<a href="#" class="refreshor" data-value="40">2</a>

点击捕获该值:

$('.refreshor').on('click',function(e){
    e.preventDefault();
    var search = $('#searchin').val();
    var page = $(this).text();
    var val = $(this).data('value');
    ....

当您替换内容时,您可以找到此链接:

success:function(response) {
     $('.ajaxSearchResults').html(response);
     $('.refreshor').filter(function(){
        return $(this).data('value') == val;
     }).addClass('preventor');
     ...

答案 2 :(得分:2)

如果要更换锚点并且想要稍后设置相同的锚点,请将其值保存到变量中,并在成功替换它之后查找它: -

注意a没有value所以请改用data-value="20"

HTML

<a href="#" class="refreshor" data-value="20">1</a>
<a href="#" class="refreshor" data-value="40">2</a>

JS

jQuery(document).ready(function($) {
    $(document).on('click', '.refreshor', function(e){
        e.preventDefault();
        var search = $('#searchin').val();
        var page = $(this).text();
        var that = this;
        var value = $(this).data('value');
        $.ajax({    
            type: "POST",
            url: "components/com_tagger/scripts/ajaxSearch.php",
            data: {
                "search": search,
                "page": page
            },
            success:function(response) {
                $('.ajaxSearchResults').html(response);

                $('.refreshor[data-value="' + value + '"]').addClass('preventer');
                $('.refreshor[data-value="' + value + '"]').hide();

                var test = $(that).text(); 
                alert(test); //this works!                  
            } 
        });
    });
});

<强>更新

并使用事件委派来绑定点击,这样事件就不会丢失。

答案 3 :(得分:0)

根据您的评论和答案,我发现这很好用:

我为锚点添加了id属性

  <a href="#" id="link1" class="refreshor" >1</a>
  <a href="#" id="link2" class="refreshor" >2</a>

并将js更改为:

jQuery(document).ready(function($) {

    $('.refreshor').on('click',function(e){
        e.preventDefault();
        var search = $('#searchin').val();
        var page = $(this).text();
        var that = '#link'+ page;

        $.ajax({

            type: "POST",
            url: "components/com_tagger/scripts/ajaxSearch.php",
            data: {"search":search,"page":page},
            success:function(response) {
                $('.ajaxSearchResults').html(response);
                $(that).addClass('preventer');


            } 
        });


    });

});

答案 4 :(得分:-2)

你必须在ajax触发后添加它。

<a href="#" class="refreshor" value="20">1</a>
<a href="#" class="refreshor" value="40">2</a>




jQuery(document).ready(function($) {
  $(document).on('click', '.refreshor', function(e){
     e.preventDefault();
     var search = $('#searchin').val();
     var page = $(this).text();
     var that = this;
     $.ajax({    
        type: "POST",
        url: "components/com_tagger/scripts/ajaxSearch.php",
        data: {
            "search": search,
            "page": page
     },
     success:function(response) {
       $('.ajaxSearchResults').html(response);
       $(that).hide(); //this doesnt work
       var test = $(that).text(); 
       alert(test); //this works!                  
     }

     $(that).addClass('preventer'); //check it out

   });
 });
});