使用`this`不能在get和post中工作

时间:2017-08-23 19:41:34

标签: jquery ajax

我想在keyup上使用slideDown div。但是当我在帖子或get方法中使用perl scripts/get_maintainer.pl [OPTIONS] -f <file>选择时,它不起作用。外面呢。但在帖子内部它不起作用。

这是我的代码。

$(this)

在这段代码中,我试图让“搜索”类的下一个父级将其向下滑动。但是一旦我使用$('.search').keyup(function() { var ID = $(this).parent().find('.hiddenid').val(); var Search = $(this).val(); if (Search == "") { $(this).parent().next().slideUp('fast'); } else { $.get('getphone.php', { ID: ID, Search: Search }, function(D) { $(this).parent().next().html(D).slideDown(1000); }); } }); 它就无效。

2 个答案:

答案 0 :(得分:1)

var $this= $(this);

说明:这是一个范围问题,你的else中的$(this)命令指向另一个元素

$('.search').keyup(function(){
     var $this= $(this);
     var ID = $this.parent().find('.hiddenid').val();
     var Search = $this.val();            
     if(Search == ""){
        $this.parent().next().slideUp('fast');
     }
     else{
        $.get('getphone.php',{ID:ID,Search:Search},function(D){
             $this.parent().next().html(D).slideDown(1000);
            });
         }              
});

答案 1 :(得分:0)

$(this)不起作用的原因是因为它在另一个函数中。通常为此,$ this用作解决方案,如另一个答案中所示。但是考虑到在这种情况下你只想将url的输出添加为html,你可以在load函数的帮助下简化get函数,这样你就没有额外的功能了需要$ this声明。

else {
    $(this).parent().next().load('getphone.php',{ID:ID,Search:Search})
                           .slideDown(1000);
}

其余代码与原始代码保持一致。如果您希望仅在加载后调用slideDown选项,则可以将其用作回调。

else {
    $(this).parent().next().load('getphone.php',{ID:ID,Search:Search},
                            function(){
                                $(this).slideDown(1000)
                            });

}

这再次对您的具体案例有帮助。