1

我有这个 jquery 代码

$('.parent').livequery('change', function() {

        $(this).parent('.show_sub_categories').append('<img src="nlevel_ajax_dropdown/loader.gif" style="float:left; margin-top:7px;" id="loader" alt="" />');

        $.post("nlevel_chid_categories.php", {
            parent_id: $(this).val(),
        }, function(response){
            var ref = $(this).parent('.show_sub_categories');   
            setTimeout("finishAjax('show_sub_categories', '"+escape(response)+"','"+ref+"')", 400);
        });

        return false;
    });

});

function finishAjax(id, response,ref){
  $('#loader').remove();
  $(ref).append(unescape(response)); // and this is giving error 
} 

我想做的是在ajax完成时调用finishAjax函数并将结果附加到触发事件的元素的父级,所以我尝试获取其父级的引用并将var ref = $(this).parent('.show_sub_categories');其与finishAjax调用setTimeout函数一起传递,但这是抛出jquery错误。

这是实际的错误消息: Syntax error, unrecognized expression: [object Object]
(function(e,t){function _(e){var t=M[e...y",[],function(){return v})})(window);

4

1 回答 1

1

您可以这样做,.done()而不是向post. 此外,匿名函数更容易调试,尤其是当您需要在setTimeout语法中传递参数时。尝试这个 :

$('.parent').livequery('change', function() {
    var ref=$(this).parent('.show_sub_categories');

    ref.append('<img src="nlevel_ajax_dropdown/loader.gif" style="float:left; margin-top:7px;" id="loader" alt="" />');

    var ajaxPost = $.post("nlevel_chid_categories.php", {
        parent_id: $(this).val()
    });

    ajaxPost.done(function(response){
        setTimeout(function(){
            finishAjax('show_sub_categories', response, ref);
        }, 400);
    });

    return false;
});

编辑:调整ref定义以全面使用它+传入未转义的 response版本.done

另外,ref传入的那个finishAjax已经是一个选择器,所以此时应该直接访问它:

function finishAjax(id, response, ref){
    $('#loader').remove();
    ref.append(response);
}
于 2013-05-14T07:35:53.237 回答