0

jQuery Block UI pluginを使用しています。以下のように;

$('#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 の結果が true の場合、これらのことを実行したいということです。私はやってみたいです;

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 return が true の場合、これらのことをネストに成功させます。しかし、これはif(result == "true")ネスト内では機能しません。どうすればこれを達成できますか?

4

3 に答える 3

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'),

    });
});
于 2013-03-29T13:52:55.797 に答える
3

追加

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

あなたの$.ajax()電話に。これによりthis、AJAX コールバックが呼び出されたときに、クリックされた要素が参照されるようになります。それがなければthis、元の DOM 要素ではなく、ajax 設定オブジェクトを参照します。

編集— Daniel Imms からの回答のように、「self」var も必要です (これ自体は、この「context」がなくても完全に適合します)。

于 2013-03-29T13:50:55.897 に答える
0
$('#someid .someclass').click(function(){
    var self = $(this);
    // other code
});

selfクリックされた要素への参照として AJAX ハンドラーで使用できるようになりました。

于 2013-03-29T13:52:57.237 に答える