Jquery通过传递的对象引用操作元素

时间:2013-05-14 07:28:10

标签: jquery reference

我有这个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错误。

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

1 个答案:

答案 0 :(得分: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);
}