2013-03-29 52 views
0

我正在使用jQuery Block UI plugin。像下面一樣;如何使用裏面的函數 - jQuery

$('#someid .someclass').click(function(){ 
    var id = "someidx"; 
    var newval = "somevalx"; 
    $.blockUI({ 
    onBlock: function() { 
     $.ajax({ 
     type: 'POST', 
     url: 'target.php', 
     data: 'data='+newval, 
     cache: false, 
     success: function(result) { 
      if(result == "true"){ 
      $('#mymessage').addClass("asuccess"); 
      }else{ 
      $('#mymessage').addClass("aerror"); 
      } 
     } 
     }); 
    }, 
    onUnblock: function(){ 
     //some functions; 
    }, 
    message: $('#mymessage'), 
    }); 
    $(this).hide(); 
    $(this).siblings('.class1').hide(); 
    $(this).siblings('.class2').show(); 
    $(this).parent("td").siblings(".class3").html(newval); 
}); 

這工作正常。但我想在if(result == "true")內部做一些功能。也就是說,如果ajax結果爲真,我想要做這些事情。我想要做;

success: function(result) { 
    if(result == "true"){ 
    $('#mymessage').addClass("asuccess"); 
    $(this).hide(); 
    $(this).siblings('.class1').hide(); 
    $(this).siblings('.class2').show(); 
    $(this).parent("td").siblings(".class3").html(newval); 
    }else{ 
    $('#mymessage').addClass("aerror"); 
    } 
} 

如果ajax返回爲真,並且把這些東西嵌套成功。但這不適用於嵌套if(result == "true")。我怎樣才能做到這一點?

+0

試着做一個'console.log(result)'看看它實際包含了什麼。 – jmar777

+0

「不工作」是什麼意思?什麼是'console.log(result)'?在你的「成功」功能裏,「這個」不是你想象的那樣。 –

+0

在嵌入ajax成功嵌套時,函數沒有執行。否則它沒關係。 –

回答

4

您可以在頂級函數中將變量設置爲this,並在內部函數中使用該變量。

$('#someid .someclass').click(function() { 

    var self = $(this); 

    var id = "someidx"; 
    var newval = "somevalx"; 
    $.blockUI({ 
     onBlock: function() { 
      $.ajax({ 
       type: 'POST', 
       url: 'target.php', 
       data: 'data=' + newval, 
       cache: false, 
       success: function (result) { 
        if (result == "true") { 
         $('#mymessage').addClass("asuccess"); 
         self.hide(); 
         self.siblings('.cancel').hide(); 
         self.siblings('.edit').show(); 
         self.parent("td").siblings(".cell2").html(newval); 
        } else { 
         $('#mymessage').addClass("aerror"); 
        } 
       } 
      }); 
     }, 
     onUnblock: function() { 
      //some functions; 
     }, 
     message: $('#mymessage'), 

    }); 
}); 
+0

這與將「context」屬性添加到選項中效果相同:-) – Pointy

+0

很多,在此之前不知道「context」。方便:P –

+0

不在這種情況下。注意嵌套,Daniel的解決方案是正確的,使用'this'的上下文不是。 – freakish

3

添加

context: self, // oops - fixed now (was "this") 

$.ajax()電話。這將確保this在調用AJAX回調時引用clicked元素。沒有這個,this引用ajax設置對象,而不是原始的DOM元素。

編輯 —也是你所需要的「自我」 VAR在丹尼爾IMMS答案(這本身將完全滿足沒有這個「背景」的事情)。

+0

'$(this).hide()'代碼根本不起作用,除非'this'引用clicked元素。那麼,鑑於此,爲什麼downvote? – Pointy

+0

他甚至沒有在他的ajax處理程序中引用'this'。 – jmar777

+0

@ jmar777請重新閱讀他的問題。他希望將這四行代碼(都以'$(this)'開始)移動到「成功」處理程序中。 – Pointy

0
$('#someid .someclass').click(function(){ 
    var self = $(this); 
    // other code 
}); 

您現在可以使用self在AJAX的處理程序,以點擊的元素的引用。